Download excel file from page via WebApi call Download excel file from page via WebApi call asp.net asp.net

Download excel file from page via WebApi call


Works also as a HTTP GET method, but don't use $ajax, instead use window.open(url);

C# code:

    [HttpGet]    [Route("report/{scheduleId:int}")]    public HttpResponseMessage DownloadReport(int scheduleId)    {        var reportStream = GenerateExcelReport(scheduleId);        var result = Request.CreateResponse(HttpStatusCode.OK);        result.Content = new StreamContent(reportStream);        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")        {            FileName = "Schedule Report.xlsx"        };        return result;    }

JS code:

downloadScheduleReport: function (scheduleId) {    var url = baseUrl + 'api/Tracker/report/' + scheduleId;    window.open(url);}


I had to make a couple of small changes to get this to work

First: Change the method to a post

[AcceptVerbs("POST")]

Second: Change from using the jQuery ajax lib to use a hidden form, here's my service function for doing the hidden form and submitting it.

exportExcel: (successCallback) =>    if $('#hidden-excel-form').length < 1        $('<form>').attr(            method: 'POST',            id: 'hidden-excel-form',            action: 'api/tools/exportXls'        ).appendTo('body');    $('#hidden-excel-form').bind("submit", successCallback)    $('#hidden-excel-form').submit()

Hopefully there's a better way to do this but for the time being it's working and downloading the excel file nicely.


I experienced the same problem. Problem solved with the following:

window.open(url)