WebAPI中将HttpResponseMessage作为excel文件返回的问题 [英] issue with returning HttpResponseMessage as excel file in WebAPI
问题描述
我创建了WebAPI,该WebAPI使用closedxml nuget返回一个excel文件.基本上,它将我的 DataTable
转换为excel.我指的是下面的几个链接,
-
我的代码:
[System.Web.Http.AcceptVerbs("GET","POST")]公共HttpResponseMessage ExportExcel(){DataTable scoredRecords = Getdt();如果(scoredRecords.Rows.Count> 0){var path = @"C:\ Raghav \ asdf.xlsx";XLWorkbook wb =新的XLWorkbook();wb.Worksheets.Add(scoredRecords,"sample");//excel在服务器上正确生成-没问题.wb.SaveAs(path);HttpResponseMessage结果=新的HttpResponseMessage(HttpStatusCode.OK);var stream = new FileStream(path,FileMode.Open);result.Content =新的StreamContent(stream);result.Content.Headers.ContentDisposition =新的ContentDispositionHeaderValue("attachment"){FileName ="sample.xlsx"};result.Content.Headers.ContentLength = stream.Length;//还尝试了"application/ms-excel"result.Content.Headers.ContentType =新的MediaTypeHeaderValue("application/octet-stream");返回结果;}}
在服务器上生成的excel没问题.只有通过webAPI下载的excel文件被损坏.无法找出问题.任何帮助表示赞赏!:)
解决方案尝试一下:
[HttpGet]公共HttpResponseMessage Export(){使用(var wb = new XLWorkbook())使用(MemoryStream ms = new MemoryStream()){wb.Worksheets.Add("sample").FirstCell().SetValue("some value");wb.SaveAs(ms);HttpResponseMessage结果=新的HttpResponseMessage(HttpStatusCode.OK);result.Content =新的ByteArrayContent(ms.GetBuffer());result.Content.Headers.ContentLength = ms.Length;result.Content.Headers.ContentDisposition =新的ContentDispositionHeaderValue("attachment"){FileName ="sample.xlsx"};result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");返回结果;}}
I have created WebAPI which returns an excel file using closedxml nuget. Basically it converts my
DataTable
to excel. I'm referring couple of links below,Issue : excel generated on server path has NO issues. But when I download the same by returning it as
HttpResponseMessage
via webAPI the excel file is corrupted. It says, "The file is corrupt and cannot be opened" :(My Code :
[System.Web.Http.AcceptVerbs("GET", "POST")] public HttpResponseMessage ExportExcel() { DataTable scoredRecords = Getdt(); if (scoredRecords.Rows.Count > 0) { var path = @"C:\Raghav\asdf.xlsx"; XLWorkbook wb = new XLWorkbook(); wb.Worksheets.Add(scoredRecords, "sample"); // excel getting generated on server properly-No issues. wb.SaveAs(path); 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") { FileName = "sample.xlsx" }; result.Content.Headers.ContentLength = stream.Length; //tried with "application/ms-excel" also result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; } }
The generated excel on server has no issues. Only the downloaded excel file via webAPI is corrupted. Unable to figure out the issue.. any help appreciated!! :)
解决方案Try this:
[HttpGet] public HttpResponseMessage Export() { using (var wb = new XLWorkbook()) using (MemoryStream ms = new MemoryStream()) { wb.Worksheets.Add("sample").FirstCell().SetValue("some value"); wb.SaveAs(ms); HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new ByteArrayContent(ms.GetBuffer()); result.Content.Headers.ContentLength = ms.Length; result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "sample.xlsx" }; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); return result; } }
这篇关于WebAPI中将HttpResponseMessage作为excel文件返回的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!