在 WebAPI 中将 HttpResponseMessage 作为 excel 文件返回的问题

2023-12-08

我创建了 WebAPI,它使用 closexml nuget 返回一个 excel 文件。基本上它改变了我的DataTable脱颖而出。我指的是下面的几个链接,

  1. 如何在 ASP.NET WebAPI 中返回文件 (FileContentResult)

  2. 从 ASP.NET Web API 中的控制器返回二进制文件

Issue :在服务器路径上生成的 excel 没有问题。但是当我通过将其返回为下载相同的内容时HttpResponseMessage通过 webAPI,Excel 文件已损坏。它说,“文件已损坏,无法打开”:(

enter image description here

我的代码:

    [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;
                        }

               }

服务器上生成的excel没有问题。只有通过 webAPI 下载的 excel 文件已损坏。无法弄清楚问题.. 任何帮助表示赞赏! :)


尝试这个:

    [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;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WebAPI 中将 HttpResponseMessage 作为 excel 文件返回的问题 的相关文章

  • CodeLite 配色方案(主题)对于 C 来说很混乱

    我最近将 CodeLite for Linux Debian 更新到版本 14 0 我主要将 CodeLite 用于 C 看起来 IDE 搞乱了颜色主题 这里我有之前 CodeLite 13 0 https i stack imgur co
  • 使用 xmlns 属性(命名空间)查询 XDocument

    我尝试从 Visual Studio csproj 文件查询元素 我创建了一个简短的示例来说明该问题 Working string xml1
  • 将 Google 云端硬盘访问权限委派给服务帐户失败

    我参与构建了一个内部使用的应用程序 用户可以通过该应用程序上传文件 并将其存储在 Google Drive 中 由于建议不要使用服务帐户作为文件所有者 因此我希望代表公司系统管理员有权访问的指定用户帐户上传应用程序 我已经创建了该应用程序以
  • 信用卡号应该存储为字符串还是整数?

    是啊 只是想想而已 我应该将在我的网站上输入的信用卡号存储为字符串还是整数 我的意思是 它们由数字组成 这让我认为它是一个整数 但我不对它们进行数学运算 所以也许字符串更合适 编辑 所以我必须在加密之前存储在某个时刻输入的数字 我可能应该更
  • 在 Windows 应用商店应用程序 (Win 8.1) 中使用 MIDI

    我的目标是在 Windows 应用商店应用程序中接收 MIDI 消息 微软提供了一个名为Microsoft WindowsPreview MidiRT 作为 nuget 包 我设法获得了 MIDI 端口 但是MessageReceived尽
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • 错误:调用 Configuration.BuildSessionFactory() 时“无法同时获取多个包”;

    升级到 NHibernate 2 1 后 我们收到此错误 QueryException Cannot simultaneously fetch multiple bags NHibernate Loader BasicLoader Post
  • 即使指定了标头,g++ 也找不到标头

    所以基本上我有一些非常简单的代码 其中包括
  • 带和不带指针声明符的 C++11 自动声明

    不同类型有什么区别bar1 and bar2 int foo 10 auto bar1 foo auto bar2 foo If both bar1 and bar2 are int 编写指针声明符是否有意义 在里面bar2宣言 这些声明完
  • 如何为 IAsyncOperation 指定回调方法

    是否可以指定一个方法完成后调用async手术 平台 C Windows Phone 8 我需要实现非阻塞方法来异步发送UDP数据包 他们有我的方法 onWriteComplete int errorCode 操作完成时回调 这是我尝试过的
  • NHibernate 继承 - 判别器值

    NHibernate 是否可以有一个像这样工作的判别器 如果值等于 String Empty gt Class1 其他 gt Class2 我已经有一个 CultureName 字符串列 我想将其用作鉴别器 我不想添加额外的布尔列 如果 C
  • “#include ”导致“错误:asm/io.h:没有这样的文件或目录”

    我正在使用 gentoo 并尝试编译一个程序来控制并行端口上的位 它的顶部附近有这一行 include
  • 开始学习 C# 的最佳方式是什么?

    我对 vb 6 有一点编程经验 而 vb net 则不多 请告诉我成为专家 C 程序员的最佳方法 我知道这需要很长时间 想想你如何学习人类语言 阅读 写作 口语和听力 阅读代码 阅读文章 阅读示例 当您更有经验时 请查看您使用的一些项目的源
  • 来自“void *”的dynamic_cast

    根据this https stackoverflow com questions 3155277 cannot dynamic cast void to templated class void 没有 RTTI 信息 因此从void 不合法
  • 使用 C# winforms 与 Windows 中的其他桌面应用程序交互

    我想知道是否可以与使用我的程序的其他程序进行交互 例如 单击另一个程序上的按钮等 我不确定这是否可能 但如果可能的话 有人可以提供一些 C 示例代码 Thanks 您可以创建消息并将其发送到其他进程 为此 您必须在 C 代码中使用 P In
  • 如何使用 Dictionary 属性序列化对象?

    在下面的示例代码中 我得到了这个error 元素 TestSerializeDictionary123 Customer CustomProperties 呕吐型 System Collections Generic Dictionary
  • MVC - 从视图调用控制器

    我是 MVC 新手 我正在使用 MVC 开发一个 Web 应用程序 该应用程序仅包含一个页面 所以在这个视图中我必须填充多个数据 假设应用程序是 新闻提要 应用程序 我需要填充最近的新闻 您喜欢的新闻 您朋友推荐的新闻等 那么我应该从视图到
  • C# 固定长度的字符串对象

    我有一堂课 我想使用固定大小的字符串 固定大小的原因是该类 序列化 为文本文件 具有固定长度的值 我想避免为每个值编写一个保护子句 而是让类处理它 所以我有大约 30 个属性 看起来像这样 public String CompanyNumb
  • 我使用 difftime 的 c 函数有时会返回 65535

    我有一个函数 使用 difftime 来检测自通信心跳停止以来的时间 以秒为单位 该函数的运行速度可以达到每 50 毫秒一次 该函数似乎可以工作 除了偶尔返回 65535 之外 我可以将执行次数减少到每秒一次 因为 difftime 的返回
  • 使用 CRTP 模式时继承中的不明确方法

    我正在定义一个DoubleWrapper类继承自两个 CRTP 基类 Ratioable and Divable 两者都定义operator 具有不同的签名 T operator double const scalar const retu

随机推荐