проблема
Я хочу вернуть файл в свой контроллер веб-API ASP.Net, но все мои подходы возвращают его HttpResponseMessage
как JSON.
Код на данный момент
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;
}
Когда я вызываю эту конечную точку в своем браузере, веб-API возвращает HttpResponseMessage
файл в формате JSON с HTTP-заголовком содержимого, установленным на application/json
.
c#
asp.net-core
.net-core
asp.net-core-webapi
Ян Крузе
источник
источник
return File(stream, "application/octet-stream", "filename.xlsx");
таким образом, когда он загружается, пользователь может открыть его напрямую.NotFound()
конечном итоге делает, но находится ли он в .NET Core или является чем-то локальным для вашего проекта?ControllerBase
и часть самого фреймворка docs.microsoft.com/en-us/dotnet/api/…Controller
и поэтому не имел доступа кControllerBase.NotFound()
методу. После получения все заработало. lol / thxВы можете вернуть FileResult с помощью следующих методов:
источник
ControllerBase
есть много перегруженных версийControllerBase.File
помощника, который возвращает любую из них.Вот упрощенный пример потоковой передачи файла:
Примечание:
Обязательно используйте
FileStreamResult
from,Microsoft.AspNetCore.Mvc
а не fromSystem.Web.Mvc
.источник