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)