Problème :
Lors de la tentative de renvoi d'un fichier dans un Contrôleur d'API Web ASP.Net Core, le HttpResponseMessage est renvoyé au format JSON avec un en-tête de contenu application/json, plutôt que sous forme de fichier.
Tentative de code :
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; }
Cause :
Le HttpResponseMessage est traité comme un modèle par le framework de l'API Web car il est renvoyé par une action décorée avec l'attribut [HttpGet].
Solution :
Pour renvoyer correctement un fichier, modifiez l'action du contrôleur pour renvoyer un IActionResult :
[Route("api/[controller]")] public class DownloadController : Controller { //GET api/download/12345abc [HttpGet("{id}")] public async Task<IActionResult> Download(string id) { Stream stream = await {{__get_stream_based_on_id_here__}}; if(stream == null) return NotFound(); // returns a NotFoundResult with Status404NotFound response. return File(stream, "application/octet-stream", "{{filename.ext}}"); // returns a FileStreamResult } }
Remarque :
Le framework éliminera le flux utilisé une fois la réponse terminée. L'utilisation d'une instruction using pour supprimer le flux avant l'envoi de la réponse entraînera une exception ou une réponse corrompue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!