WebAPI中将HttpResponseMessage作为excel文件返回的问题 [英] issue with returning HttpResponseMessage as excel file in WebAPI

查看:261
本文介绍了WebAPI中将HttpResponseMessage作为excel文件返回的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了WebAPI,该WebAPI使用closedxml nuget返回一个excel文件.基本上,它将我的 DataTable 转换为excel.我指的是下面的几个链接,

  1. 我的代码:

      [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,

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

    2. Returning binary file from controller in ASP.NET Web API

    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆