Maison > développement back-end > C++ > Comment renvoyer un fichier au lieu de JSON dans l'API Web ASP.Net Core ?

Comment renvoyer un fichier au lieu de JSON dans l'API Web ASP.Net Core ?

Susan Sarandon
Libérer: 2024-11-04 07:04:30
original
434 Les gens l'ont consulté

How to Return a File Instead of JSON in ASP.Net Core Web API?

Renvoi d'un fichier dans l'API Web ASP.Net Core

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;
}
Copier après la connexion

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
    }    
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal