Heim >Backend-Entwicklung >C++ >Wie kann ich in der ASP.Net Core-Web-API eine Datei anstelle von JSON zurückgeben?

Wie kann ich in der ASP.Net Core-Web-API eine Datei anstelle von JSON zurückgeben?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 07:04:30431Durchsuche

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

Zurückgeben einer Datei in der ASP.Net Core-Web-API

Problem:

Beim Versuch, eine Datei in einem zurückzugeben ASP.Net Core Web API-Controller, die HttpResponseMessage wird als JSON mit einem Anwendungs-/JSON-Inhaltsheader und nicht als Datei zurückgegeben.

Codeversuch:

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;
}

Ursache:

Die HttpResponseMessage wird vom Web-API-Framework als Modell behandelt, da sie von einer Aktion zurückgegeben wird, die mit dem Attribut [HttpGet] versehen ist.

Lösung:

Um eine Datei korrekt zurückzugeben, ändern Sie die Controller-Aktion, um ein IActionResult zurückzugeben:

[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
    }    
}

Hinweis:

Das Framework entsorgt den verwendeten Stream, nachdem die Antwort abgeschlossen ist. Die Verwendung einer using-Anweisung zum Löschen des Streams vor dem Senden der Antwort führt zu einer Ausnahme oder einer beschädigten Antwort.

Das obige ist der detaillierte Inhalt vonWie kann ich in der ASP.Net Core-Web-API eine Datei anstelle von JSON zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn