How to download an Excel file from ASP.NET Web API in Angular application?

1 minute read

I’ve looked for some complete solution to download an EXCEL file from an ASP.NET Web API in Angular 9 application, but I didn’t find it.

As I’ve done it recently, I would like to share my implementation with you if it helps.

Firstly, expose an interface in the Web API to download the Excel file.

public async Task<HttpResponseMessage> GenerateExcelFile(){
        var data = await GetData();
        var stream = _excelGenerationService.Generate(data);
        //This is very important, it reset the reading position of the stream!
        stream.Position = 0;

        var result = Request.CreateResponse(HttpStatusCode.OK);
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentLength = stream.Length;
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachement");

        return result;
    catch(Exception e){
        _logger.Error("Failed to download excel", e);
        return new HttpResponseMessage(HttpStatusCode.InternalServerError);

You need to install npm package file-saver in your application to save the Excel.

npm install file-saver --save

And then, you can download the content in your Angular application by creating a HTTP GET request.

import * as FileSaver from 'file-saver';

    const headers = this.headerService.CreateHeaders();
    const url = environment.api + '/api/v1/excel';
    return this.httpClient.get(url, 
        // You need to set responseType to blob
    }).subscribe((x: Blob) => {
        FileSaver.saveAs(x, 'FileName.xlsx');

This code works perfectly in IE and Chrome.

Feel free to take it as a sample code. :)

SUN Jiangong

SUN Jiangong

A senior .NET engineer, software craftsman. Passionate about new technologies.