Problem
Chcę zwrócić plik w moim kontrolerze interfejsu API sieci Web ASP.Net, ale wszystkie moje podejścia zwracają plik HttpResponseMessage
jako JSON.
Kod do tej pory
public async Task<HttpResponseMessage> DownloadAsync(string id)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent({{__insert_stream_here__}});
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return response;
}
Kiedy wywołuję ten punkt końcowy w mojej przeglądarce, interfejs API sieci Web zwraca HttpResponseMessage
as JSON z nagłówkiem zawartości HTTP ustawionym na application/json
.
c#
asp.net-core
.net-core
asp.net-core-webapi
Jan Kruse
źródło
źródło
return File(stream, "application/octet-stream", "filename.xlsx");
ten sposób, gdy pobiera, użytkownik może go bezpośrednio otworzyć.NotFound()
ostatecznie robi, ale czy znajduje się w .NET Core, czy jest to coś lokalnego dla twojego projektu?ControllerBase
i jest częścią samej struktury docs.microsoft.com/en-us/dotnet/api/…Controller
przez co nie miał dostępu doControllerBase.NotFound()
metody. Po uzyskaniu wszystko działało. lol / thxMożesz zwrócić FileResult za pomocą tych metod:
źródło
ControllerBase
znajduje się wiele przeciążonych wersjiControllerBase.File
pomocnika, który zwraca jeden z nich.Oto uproszczony przykład przesyłania strumieniowego pliku:
Uwaga:
Pamiętaj, aby używać
FileStreamResult
from,Microsoft.AspNetCore.Mvc
a nie fromSystem.Web.Mvc
.źródło