Problème
Je souhaite renvoyer un fichier dans mon contrôleur d'API Web ASP.Net, mais toutes mes approches renvoient le HttpResponseMessage
sous forme de JSON.
Code jusqu'à présent
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;
}
Lorsque j'appelle ce point de terminaison dans mon navigateur, l'API Web renvoie le en HttpResponseMessage
tant que JSON avec l'en-tête de contenu HTTP défini sur application/json
.
c#
asp.net-core
.net-core
asp.net-core-webapi
Jan Kruse
la source
la source
return File(stream, "application/octet-stream", "filename.xlsx");
cette façon, lors du téléchargement, l'utilisateur peut l'ouvrir directement.NotFound()
finalement, mais réside-t-il dans .NET Core ou s'agit-il d'un élément local de votre projet?ControllerBase
et fait partie du cadre lui-même docs.microsoft.com/en-us/dotnet/api/…Controller
et n'avait donc pas accès à laControllerBase.NotFound()
méthode. Une fois dérivé, tout a fonctionné. lol / thxVous pouvez retourner FileResult avec ces méthodes:
la source
ControllerBase
il existe de nombreuses versions surchargées deControllerBase.File
helper qui renvoie l'une d'entre elles.Voici un exemple simpliste de streaming d'un fichier:
Remarque:
Assurez-vous d'utiliser
FileStreamResult
deMicrosoft.AspNetCore.Mvc
et non deSystem.Web.Mvc
.la source