How to return a file (FileContentResult) in ASP.NET WebAPI

How to return a file (FileContentResult) in ASP.NET WebAPI

web api return file byte array
download pdf file from web api c#
asp.net core return file
return excel file from web api c#
download file from web api c#
web api return pdf byte array
return file c#
.net return a file

In a regular MVC controller, we can output pdf with a FileContentResult.

public FileContentResult Test(TestViewModel vm)
{
    var stream = new MemoryStream();
    //... add content to the stream.

    return File(stream.GetBuffer(), "application/pdf", "test.pdf");
}

But how can we change it into an ApiController?

[HttpPost]
public IHttpActionResult Test(TestViewModel vm)
{
     //...
     return Ok(pdfOutput);
}

Here is what I've tried but it doesn't seem to work.

[HttpGet]
public IHttpActionResult Test()
{
    var stream = new MemoryStream();
    //...
    var content = new StreamContent(stream);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    content.Headers.ContentLength = stream.GetBuffer().Length;
    return Ok(content);            
}

The returned result displayed in the browser is:

{"Headers":[{"Key":"Content-Type","Value":["application/pdf"]},{"Key":"Content-Length","Value":["152844"]}]}

And there is a similar post on SO: Returning binary file from controller in ASP.NET Web API . It talks about output an existing file. But I could not make it work with a stream.

Any suggestions?


Instead of returning StreamContent as the Content, I can make it work with ByteArrayContent.

[HttpGet]
public HttpResponseMessage Generate()
{
    var stream = new MemoryStream();
    // processing the stream.

    var result = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new ByteArrayContent(stream.ToArray())
    };
    result.Content.Headers.ContentDisposition =
        new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
    {
        FileName = "CertificationCard.pdf"
    };
    result.Content.Headers.ContentType =
        new MediaTypeHeaderValue("application/octet-stream");

    return result;
}

How to return a file (FileContentResult) in ASP.NET WebAPI , In a regular MVC controller, we can output pdf with a FileContentResult . public FileContentResult Test(TestViewModel vm) { var stream = new  We shall see how to perform a download or file return in ASP.NET core-based application. This file download or return techniques can be used for any ASP.NET Core, Angular app. The file helper method is built into your controller. These methods are coming from FileResult Abstract class and give you multiple options for retrieving files to send it to the client. 1. FileStreamResult. Example: Return Image (.png) file


If you want to return IHttpActionResult you can do it like this:

[HttpGet]
public IHttpActionResult Test()
{
    var stream = new MemoryStream();

    var result = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new ByteArrayContent(stream.GetBuffer())
    };
    result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")
    {
        FileName = "test.pdf"
    };
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

    var response = ResponseMessage(result);

    return response;
}

How to return a file (FileContentResult) in ASP.NET WebAPI, How to return a file (FileContentResult) in ASP.NET WebAPI. Question. In a regular MVC controller, we can output pdf with a FileContentResult . My previous question: How to return file from ASP.net 5 web api I am trying to return a file as the response from Web API POST request. I'm using dnx451 framework and rc1-final build. Controller


This question helped me.

So, try this:

Controller code:

[HttpGet]
public HttpResponseMessage Test()
{
    var path = System.Web.HttpContext.Current.Server.MapPath("~/Content/test.docx");;
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(path, FileMode.Open);
    result.Content = new StreamContent(stream);
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = Path.GetFileName(path);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    result.Content.Headers.ContentLength = stream.Length;
    return result;          
}

View Html markup (with click event and simple url):

<script type="text/javascript">
    $(document).ready(function () {
        $("#btn").click(function () {
            // httproute = "" - using this to construct proper web api links.
            window.location.href = "@Url.Action("GetFile", "Data", new { httproute = "" })";
        });
    });
</script>


<button id="btn">
    Button text
</button>

<a href=" @Url.Action("GetFile", "Data", new { httproute = "" }) ">Data</a>

POST method returns FileContentResult but , Hello, I've written a POST method in Web API project. Web.Mvc.​FileContentResult DownloadImportedFile(stri Download file from an ASP. Teams. Q&A for Work. Stack Overflow for Teams is a private, secure spot for you and your coworkers to find and share information.


Here is an implementation that streams the file's content out without buffering it (buffering in byte[] / MemoryStream, etc. can be a server problem if it's a big file).

public class FileResult : IHttpActionResult
{
    public FileResult(string filePath)
    {
        if (filePath == null)
            throw new ArgumentNullException(nameof(filePath));

        FilePath = filePath;
    }

    public string FilePath { get; }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        var response = new HttpResponseMessage(HttpStatusCode.OK);
        response.Content = new StreamContent(File.OpenRead(FilePath));
        var contentType = MimeMapping.GetMimeMapping(Path.GetExtension(FilePath));
        response.Content.Headers.ContentType = new MediaTypeHeaderValue(contentType);
        return Task.FromResult(response);
    }
}

It can be simply used like this:

public class MyController : ApiController
{
    public IHttpActionResult Get()
    {
        string filePath = GetSomeValidFilePath();
        return new FileResult(filePath);
    }
}

FileContentResult Class (System.Web.Mvc), Writes the file content to the response. Applies to. ASP.NET MVC. 5.2. Is this page helpful? In this article, we are going to discuss how to return files (PDF/Word/Excel) from Web API service. I am going to explain a step by step process to transfer a file over Http REST service. Let’s assume, we have a requirement to send a file based on the file type provided to the service request.


I am not exactly sure which part to blame, but here's why MemoryStream doesn't work for you:

As you write to MemoryStream, it increments it's Position property. The constructor of StreamContent takes into account the stream's current Position. So if you write to the stream, then pass it to StreamContent, the response will start from the nothingness at the end of the stream.

There's two ways to properly fix this:

1) construct content, write to stream

[HttpGet]
public HttpResponseMessage Test()
{
    var stream = new MemoryStream();
    var response = Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StreamContent(stream);
    // ...
    // stream.Write(...);
    // ...
    return response;
}

2) write to stream, reset position, construct content

[HttpGet]
public HttpResponseMessage Test()
{
    var stream = new MemoryStream();
    // ...
    // stream.Write(...);
    // ...
    stream.Position = 0;

    var response = Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StreamContent(stream);
    return response;
}

2) looks a little better if you have a fresh Stream, 1) is simpler if your stream does not start at 0

FileContentResult Class (Microsoft.AspNetCore.Mvc), Represents an that when executed will write a binary file to the response. Creates a new FileContentResult instance with the provided fileContents and the provided contentType . Applies to. ASP.NET Core. 3.1 3.0 2.2 2.1 2.0 1.1 1.0  Therefore, do not use a using (var stream = …) block. Web API will dispose the stream for you. Make sure that the stream has its current position set to 0 (i.e. the beginning of the stream's data). In the above example, this is a given since you've only just opened the file.


Return or Download File in ASP.NET Core WebAPI, If this is ASP.net-Core then you are mixing web API versions. Have the action return a derived IActionResult because in your current code the framework is  And there is a similar post on SO: Returning binary file from controller in ASP.NET Web API . It talks about output an existing file. It talks about output an existing file. But I could not make it work with a stream.


FileContentResult. Here we will be returning an Excel file(.xslx) from the Controller method. Here we will be returning a stream of bytes  And there is a similar post on SO: Returning binary file from controller in ASP.NET Web API . It talks about output an existing file. It talks about output an existing file. But I could not make it work with a stream.


This article explains how to upload files in the database and download files from the database in the ASP.NET Web API. This file can be a text file or an image file. The procedure for creating the application is as in the following. Step 1. First we create a database in SQL. Open SQL Server 2012.