使用 ASP.NET Core 将 PDF 返回到浏览器

2023-11-29

我在 ASP.Net core 中创建了 Web API 以返回 PDF。这是我的代码:

public HttpResponseMessage Get(int id)
{
    var response = new HttpResponseMessage(System.Net.HttpStatusCode.OK);           
    var stream = new System.IO.FileStream(@"C:\Users\shoba_eswar\Documents\REquest.pdf", System.IO.FileMode.Open);
    response.Content = new StreamContent(stream);
    response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = "NewTab";
    response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
    return response;
}

但它只返回 JSON 响应:

{
   "version":{
      "major":1,
      "minor":1,
      "build":-1,
      "revision":-1,
      "majorRevision":-1,
      "minorRevision":-1
   },
   "content":{
      "headers":[
         {
            "key":"Content-Disposition",
            "value":[
               "attachment; filename=NewTab"
            ]
         },
         {
            "key":"Content-Type",
            "value":[
               "application/pdf"
            ]
         }
      ]
   },
   "statusCode":200,
   "reasonPhrase":"OK",
   "headers":[

   ],
   "requestMessage":null,
   "isSuccessStatusCode":true
}

我在这里做错了什么吗?


正如中所解释的ASP.NET Core HTTPRequestMessage 返回奇怪的 JSON 消息, ASP.NET Core 不支持返回HttpResponseMessage(您安装了什么软件包来访问该类型?)。

因此,序列化器只是简单地写入所有公共属性HttpResponseMessage到输出,就像任何其他不受支持的响应类型一样。

要支持自定义响应,您必须返回IActionResult-实施类型。有很多这样的。对于你的情况,我会调查FileStreamResult:

public IActionResult Get(int id)
{
    var stream = new FileStream(@"path\to\file", FileMode.Open);
    return new FileStreamResult(stream, "application/pdf");     
}

或者简单地使用PhysicalFileResult,其中为您处理流:

public IActionResult Get(int id)
{
    return new PhysicalFileResult(@"path\to\file", "application/pdf");
}

当然,所有这些都可以使用辅助方法来简化,例如Controller.File():

public IActionResult Get(int id)
{
    var stream = new FileStream(@"path\to\file", FileMode.Open);
    return File(stream, "application/pdf", "FileDownloadName.ext");
}

这只是抽象了一个FileContentResult or FileStreamResult(对于这种过载,后者)。

或者,如果您要转换较旧的 MVC 或 Web API 应用程序,并且不想一次转换所有代码,请添加对WebApiCompatShim (NuGet)并将当前代码包装在ResponseMessageResult:

public IActionResult Get(int id)
{
    var response = new HttpResponseMessage(HttpStatusCode.OK);           
    var stream = ...
    response.Content...

    return new ResponseMessageResult(response);
}

如果你不想使用return File(fileName, contentType, fileDownloadName),那么FileStreamResult不支持从构造函数或通过属性设置内容处置标头。

在这种情况下,您必须在返回文件结果之前自行将该响应标头添加到响应中:

var contentDisposition = new ContentDispositionHeaderValue("attachment");
contentDisposition.SetHttpFileName("foo.txt");
Response.Headers[HeaderNames.ContentDisposition] = contentDisposition.ToString();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ASP.NET Core 将 PDF 返回到浏览器 的相关文章

  • 如何在运行 ASP.NET 页面时以编程方式设置表格背景?

    我有一个 aspx 页面 其默认背景颜色是一种 当选择单选按钮的某个选项时 我需要能够以编程方式更改它 我尝试设置表的 ID 字段 但似乎无法在 C 代码隐藏文件中访问它 我原来的表是 table style width 100 backg
  • 在 .NET Core 上通过 MEF 将参数传递给插件构造函数?

    我花了几个小时试图弄清楚如何通过 MEF System Composition 将参数传递给插件构造函数 但一切都无济于事 不用说 相关文档很少 查看源代码也没有帮助 这曾经非常容易做到 使用 CompositionHost Compose
  • 在 ASP.NET 中优雅地处理 URI 黑客攻击

    我编写了一个应用程序 可以优雅地处理大多数异常 页面设计完好无损 并且有一条漂亮的错误消息 我的应用程序将它们全部捕获在Page Error事件并添加了例外HttpContext Curent Context Items然后做了一个Serv
  • appSettings 与 applicationSettings。应用程序设置已过时? [复制]

    这个问题在这里已经有答案了 我对在 web config 中保存设置的两种方法有一些疑问 应用程序设置 查看 web config
  • 从引用 Web 应用程序访问时,IntelliSense 不适用于 .NET Core 3.1 Razor 类库中的 CSS 文件

    我正在利用 NET Core 3 1 Razor 类库 RCL 创建可重用的 UI 如下所示 我能够创建一个包含静态资产的 RCL 并且能够按照上面链接中记录的方式使用它们 默认情况下 Visual Studio 2019 16 5 1 仅
  • 调用 Web 服务时“请求失败,响应为空”

    从 aspx 页面调用服务器中托管的 Web 服务时 收到类似 请求失败 响应为空 的错误 我的页面中的代码 try HttpWebRequest request1 HttpWebRequest WebRequest Create http
  • 如何从用户控件引用母版页?

    我正在寻找一种方法 最好 从使用母版页的内容页中找到的用户控件强类型母版页 遗憾的是 您不能在用户控件中使用它 我试图从用户控件访问母版页的属性 而不必将该属性从母版页传递到内容页再传递给用户控件 因为多个内容页使用相同的用户控件 一处改变
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • Azure网站有时无法连接到SQL Azure数据库

    我已经在 Azure 中测试了一个网站大约一个月 免费试用 现在我已经订阅了即用即付的服务 当我进行免费试用时 我完全没有遇到连接问题 现在 我再次部署到一个在即用即付订阅上创建的新网站 其设置 缩放模式等 与前一个网站相同 但是 现在当我
  • 是否可以合理地解决防病毒扫描工作目录的问题?

    我的 Win32 应用程序在运行时在指定的临时文件夹中执行大量磁盘操作 并且认真地重新设计它是不可能的 某些客户端具有扫描同一临时目录的防病毒软件 它只是扫描所有内容 我们试图说服他们禁用它 它不起作用 所以它也是不可能的 每隔一段时间 例
  • 在字段更改时显示 asp-validation-summary

    使用 ASP NET Core 不显眼的客户端验证 我想在字段更改时显示验证摘要 不仅仅是在表单提交上 The div div 元素在表单提交时显示每个字段的相关错误消息 但在字段修改时 且修改状态无效 则不显示 这是我的示例代码 我的型号
  • ASP.NET 中用户控件和页面的公共基类

    现在我的页面有一个继承的基类System Web UI Page和我的用户控件的另一个基类继承System Web UI UserControl 这些类包含相同的方法 由于 C 不支持多重继承 我无法将这两个类合并为一个同时继承 Page
  • ASP.NET Core Web 应用程序和 Razor 类库项目之间的路由

    我创建了一个 ASP NET Core 3 0 MVC 项目 它运行良好 在同一个解决方案中 我添加了 3 个 或更多 项目 Razor 类库 每个这样的项目都有一个控制器 如何配置路由以便可以访问这些项目的控制器方法 我的解决方案如下所示
  • Byte[] 和 java.lang.OutOfMemoryError 按位读/写文件

    我正在努力擦除 Android 中的一些可用空间 这是我的代码 private void creatingFileDelete int size int passMode File lastFile new File Environment
  • 与 Jackson 一起从 ASP.NET 反序列化日期

    我有一个 json 字符串 从 ASP NET Rest 服务返回 中的日期 如下所示 created Date 1277931782420 0700 杰克逊无法解析该日期 我可以编写自己的日期格式并将其传递给mapper getDeser
  • 在 ASP.NET MVC 中使用 bootstrap 创建模式

    我在 ASP NET MVC 项目上使用 NET Framework 4 5 Bootstrap v3 3 6 我想做的是创建一个模态表单 我尝试了以下方法 在主布局中创建了一个模态容器 div class modal fade style
  • 除了第一列之外,Gridview 行可点击?

    我使用以下代码使 gridview 的整行可单击 protected void gridMSDS RowDataBound object sender GridViewRowEventArgs e if e Row RowType Data
  • System.MissingMethodException:找不到方法?

    以前工作的 ASP NET WebForms 应用程序现在抛出此错误 System MissingMethodException 找不到方法 The DoThis方法位于同一个类上 它应该可以工作 我有一个这样的通用处理程序 public
  • 第一次在更新面板中自动将文件上传到服务器不起作用

    要求 我正在尝试在用户选择文件后立即上传该文件 我必须满足以下要求 该按钮看起来与应用程序中的其他按钮类似 用户选择文件后就会上传该文件 我需要它位于 UpdatePanel 中 因为我必须对页面进行有条件的更新 我CAN对所选文件进行完整

随机推荐

  • 从 JSP 输出创建 PDF

    我有一个带有 PDF 导出选项的网页 我必须在 PDF 中显示页面的内容 目前我使用 iText PDF Library 来生成 PDF 问题是使用 iText 创建 PDF 是一个相当大的挑战 此外 我们经常对网页的布局 UI 进行更改
  • Android静态方法可以很好地实时绘制后台线程数据,但这是一个好的解决方案吗?

    我一直在问一系列关于我的 Android 项目的不断变化的问题 该项目不断实时绘制蓝牙数据 而且我在提问方面也做得不太好 所以我需要做的是编辑这个问题 清理它 添加重要的细节 最重要的是我需要添加相关代码部分的代码片段 特别是我已经修改过很
  • 广告拦截器会拦截 Ajax 调用响应 html

    我正在页面上呈现一些统计信息 因为这需要一些时间 我在页面加载后将此请求作为 ajax 调用
  • 限制插件汇编代码访问

    我想创建一个插件架构 在其中我可以将程序集 API 限制为非常受限制的内容 即仅允许函数白名单 是否可以限制插件程序集可以调用哪些函数 方法 我可以使用 AppDomains 来做到这一点吗 有人有一个简单的例子吗 NET 添加了可能符合要
  • 最小的 Android 小部件,从未收到 APPWIDGET_DELETED 和 APPWIDGET_DISABLED 意图

    我遇到的问题与之前提出的问题非常相似 但不完全相同 参考 1 2 3 4 我编写了一个最小的 Android 小部件 并且APPWIDGET DELETED and APPWIDGET DISABLED从未被收到 在上面的参考文献1和2中
  • 有了 ASP.NET 会员资格,我如何显示 403?

    默认情况下 当用户无权访问受保护页面时 ASP NET 的成员资格提供程序将重定向到 loginUrl 有没有办法在不重定向用户的情况下显示自定义 403 错误页面 我想避免将用户发送到登录页面并在地址栏中显示 ReturnUrl 查询字符
  • 根据url参数设置Cookie

    每当用户点击我们的附属链接之一并登陆我们的 URL 中包含 src uni 的网站时 我都需要设置一个 cookie URL 将如下所示 创建cookie的函数 function SetCookie var url window locat
  • 有哪些比 .gitignore 更有效的方法可以将文件保留在存储库之外?

    我的开发团队中的人员不断推送特定于构建的文件 文件夹节点模块和其他 到我们的存储库中 尽管这些文件位于 gitignore文件 大概是git add all f或与之相关的东西 这是一种巨大的痛苦 而且事实证明让人们停止这样做很困难 有什么
  • IdentityServer4反向通道注销问题

    在 ASP NET Core 2 上使用 IdentityServer4 使用 ASP NET MVC5 与此用例相关的两个客户端 编辑 使用cookie进行身份验证 隐式流程 使用反向通道注销 如下所示 涉及 4 个应用程序 两个客户端
  • 如何在 Zend Framework 2 应用程序中模块的 getConfig() 中使用 global.php/local.php 配置?

    在 ZF2 应用程序中 我有一些配置 即 1 需要根据环境而有所不同 2 特定于具体模块 我目前正在使用它here描述 全局 php 和本地 php return array modules gt array Cache gt array
  • Swift:触发 TableViewCell 导致另一个 ViewController 中 UIWebView 中的链接

    当我点击一个tableViewCell我想要一个链接 特定于该单元格的indexPath row 在带有 webView 的新 viewController 中打开 示例 我点击了第三个单元格tableViewwww apple com 将
  • 如何在iOS中制作其他语言的键盘

    我想创建一个与 iPhone 键盘不同的高棉键盘 我怎样才能做到这一点 不幸的是 您无法控制键盘的语言 用户通过设置应用程序选择他们想要使用的键盘 并可以使用键盘上的地球图标在它们之间切换 打开键盘后 它将打开最近使用的键盘
  • Feign 客户端 - 动态授权标头

    我有一项服务可以获取带有授权标头的 http 请求 在处理请求时 我想使用 Feign Client 来查询另一个服务 对其他服务的查询应包含相同的授权标头 目前 我使用 Filter 从传入请求中提取授权标头 并将标头存储在 Thread
  • RxJS Observables 嵌套订阅?

    有什么方法可以简化像下面的代码示例这样的事情 我找不到合适的运营商 有人可以举一个简短的例子吗 this returnsObservable1 subscribe success gt this returnsObservable2 sub
  • SonarQube 和 BitBucket 在 Pull 请求上集成

    我是 BitBucket 的新手 继承了一个项目 现在正在尝试加快速度并完成代码 我们有一个 DevSecOps 管道 使用 BitBucket 作为 SCM SonarQube 作为静态分析引擎以及 Maven 或 Jenkins 具体取
  • 指南是否保证是唯一的?

    我使用 Guid 作为数据库中的主键 想知道是否有可能生成重复的 Guid 指南是否保证是唯一的 虽然不能保证每个生成的 GUID 都是唯一的 但唯一键的总数 2 128 或 3 4 10 38 非常大 因此相同数字生成两次的概率非常小 例
  • 错误:异步模块或处理程序已完成,而异步操作仍处于挂起状态

    我有一个控制器操作方法来保存用户详细信息 如下所示 public async Task
  • 如何从sklearn管道变压器中提取特征名称?

    以供参考 Python 3 8 3 sklearn 1 0 2 我有一个scikit learn pipeline为我格式化一些数据 如下所述 我定义我的pipeline像这样 Pipeline 1 cat selector make co
  • Cassandra 性能随时间更新行

    我正在尝试确定 Cassandra 是否适合我的应用程序 因为未知我们将来需要扩展多少并且可能会迅速发生 我一直在观看 2013 年 C 峰会的各个部分 具体来说 Axel Liljencrantz Spotify 的后端开发人员 在这里说
  • 使用 ASP.NET Core 将 PDF 返回到浏览器

    我在 ASP Net core 中创建了 Web API 以返回 PDF 这是我的代码 public HttpResponseMessage Get int id var response new HttpResponseMessage S