Home > Backend Development > C++ > body text

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

Susan Sarandon
Release: 2024-11-04 07:04:30
Original
364 people have browsed it

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

Returning a File in ASP.Net Core Web API

Problem:

When attempting to return a file in an ASP.Net Core Web API controller, the HttpResponseMessage is being returned as JSON with an application/json content header, rather than as a file.

Code Attempt:

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;
}
Copy after login

Cause:

The HttpResponseMessage is being treated as a model by the web API framework because it is being returned from an action that is decorated with the [HttpGet] attribute.

Solution:

To correctly return a file, modify the controller action to return an 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
    }    
}
Copy after login

Note:

The framework will dispose of the used stream after the response is completed. Using a using statement to dispose of the stream before the response is sent will result in an exception or corrupt response.

The above is the detailed content of How to Return a File Instead of JSON in ASP.Net Core Web API?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!