ASP.NET MVC - 单击以在浏览器中查看 PDF 适用于一个 URL(但不适用于另一个)

ASP.NET MVC - click to view PDF in browser works with one URL (but not another)

我的 Intranet 站点需要允许用户查看 PDF 文档而无需提示他们download/save将文档传输到他们的计算机。

目前,这在用户尝试查看 官方 文档时有效:

当任何人尝试点击 URL 并直接 link 到 工作副本 时,它 总是 提示用户将下载保存到他们的计算机。

我花了好几个小时试图弄清楚为什么会发生这种情况。这是我目前所知道的:

<li class="Item"><a class="tile" href="@d.URL">@d.Description<br />@d.FileDate</a>

<li class="Item"><a class="tile" href="@d.URL">@d.Description<br />@d.FileDate</a>

(在两个 link 中,@d 表示用户可以单击的单个文档;视图模型有两种单独类型的文档 - 它们都是 select 列表 - 加载到页面上的列表:官方文档、工作副本或工作文档。)

@using (Html.BeginForm("Case", "Portal", FormMethod.Post, new { enctype = "multipart/form-data" }))

enctype设置为multipart/form-data,因为用户在此视图上传文件。)

我已经尝试将其中一份官方文档(打开时总是没有下载提示)并将其添加到工作文档部分,只是为了看看是否有变化。当我执行此操作(在新位置查看 PDF 文件)时,我会立即收到下载提示。

我真的很困惑。如果我的内部网站在浏览器中查看 PDF 文件时出现系统范围的问题,那么没有人能够在他们的浏览器中查看文件,并且总是被要求下载它们。

我已经尝试查看其他 Whosebug 问题(例如 this one)以查看将 "content-type" 或类似描述符附加到响应中如何帮助解决问题,但我不确定如何这样做以及它是否对我有帮助。 (我再次感到困惑,为什么一个 hyperlink 允许我在浏览器中查看,而另一个却不允许。)

一个 最终 考虑:我无法查看实际放置文件的两个位置的属性,我想知道这些 "folders" 是否需要检查他们的设置。这些文档存储在 SharePoint 2010 站点上,用户可以上传多个工作文档以添加到列表中。 (用户只能上传到工作文档部分,不能上传到官方部分。)

是否提示用户下载取决于两个因素:1) Content-Disposition header 发送的内容和 2) 客户端的功能。

第二种容易排除。如果浏览器安装了 PDF reader 插件或默认带有一个 (Chrome),那么它将能够在浏览器中查看 PDF。如果没有,它将被强制下载,无论如何。如果您可以在浏览器中查看任何 PDF,这应该不是问题。

第一个是更有可能的原因。 Content-Disposition header 可以设置为 attachment(下载)或 inline(在客户端中查看),以及可选的文件名。如果设置了文件名,但未设置 attachmentinline,则默认为 attachment.

您尚未指定这些 PDF 的链接如何发挥作用。如果它们直接指向实际存在于文件系统上的静态文件,则处理由 Web 服务器决定,实际上,您会看到所有这些文件都已下载或在浏览器中都已查看。

如果您有一个 returning 文件内容的操作,那么您可以控制配置,您应该检查 return 这些文件的操作以确保它被设置为什么你觉得应该是。