Asp.net mvc 如何仅在用户请求在ASP.NET MVC中保存文件时提供文件下载名?

Asp.net mvc 如何仅在用户请求在ASP.NET MVC中保存文件时提供文件下载名?,asp.net-mvc,download,Asp.net Mvc,Download,我有一个控制器动作,它会返回这样的文件结果 return this.File("file.pdf", "application/pdf"); 对于URL“/Download/322”-其中322是文件的id 这非常有效,因此,如果用户单击指向PDF的链接,只要安装了PDF插件,它就会在他们的web浏览器中打开 但是,如果他们右键单击链接并选择“另存为…”会怎么样?浏览器会弹出文件名为“322”的窗口。我希望在这一点上有一个更好的文件名,方法如下: return this.File("file.

我有一个控制器动作,它会返回这样的文件结果

return this.File("file.pdf", "application/pdf");
对于URL“/Download/322”-其中322是文件的id

这非常有效,因此,如果用户单击指向PDF的链接,只要安装了PDF插件,它就会在他们的web浏览器中打开

但是,如果他们右键单击链接并选择“另存为…”会怎么样?浏览器会弹出文件名为“322”的窗口。我希望在这一点上有一个更好的文件名,方法如下:

return this.File("file.pdf", "application/pdf", "file.pdf");
但是如果我将控制器更改为那样返回,那么它将始终弹出下载框,因为MVC正在将内容处置头设置为附件(因此我无法嵌入文件)


总之,我是否可以检测到用户正在尝试下载文件,而不是文件只是嵌入到页面上的某个内容中?

好吧,经过进一步思考,我决定每次只提供文件名。唯一的缺点是它将被标记为附件,因此不会加载到浏览器中(用户将下载该文件)


另外,我真的不认为你能做到我上面要求的。。。所以除非有人有其他想法。。。我会接受这个答案。

好吧,经过仔细考虑,我决定每次只提供文件名。唯一的缺点是它将被标记为附件,因此不会加载到浏览器中(用户将下载该文件)


另外,我真的不认为你能做到我上面要求的。。。所以除非有人有其他想法。。。我接受这个答案。

您无法确定浏览器如何配置以处理文档/内容

例如,可以右键单击HTML文档中的链接并选择“将链接另存为”/“将目标另存为”,然后下载该文件。该链接可能指向另一个HTML文档。绝对没有办法确定这是否发生了

唯一直接的方法是将响应的“内容处置”指定为“附件”,并使用具有适当值的参数“filename”

您的HTML响应应包含以下标题:

Content-Type: whatever/be-it
Content-Disposition: attachment; filename=FilenameToSaveAs.Ext
例如:

Content-Type: text/html
Content-Disposition: attachment; filename=mypage.html
如果浏览器能够理解这些标题(目前大多数浏览器都能理解),那么它们将打开“打开/保存/取消”对话框


它类似于Gmail中的“下载附件”图像,否则图像将显示在浏览器本身中。

您无法确定浏览器如何配置以处理文档/内容

例如,可以右键单击HTML文档中的链接并选择“将链接另存为”/“将目标另存为”,然后下载该文件。该链接可能指向另一个HTML文档。绝对没有办法确定这是否发生了

唯一直接的方法是将响应的“内容处置”指定为“附件”,并使用具有适当值的参数“filename”

您的HTML响应应包含以下标题:

Content-Type: whatever/be-it
Content-Disposition: attachment; filename=FilenameToSaveAs.Ext
例如:

Content-Type: text/html
Content-Disposition: attachment; filename=mypage.html
如果浏览器能够理解这些标题(目前大多数浏览器都能理解),那么它们将打开“打开/保存/取消”对话框


这类似于Gmail中的“下载附件”图像,否则将显示在浏览器本身中。

发布另一个答案。。。因为在注释中格式不起作用

我想到一个想法。。。使用JavaScript的方法

下载:

<a href='downloadFile.ext'
   onclick="alert('This file cannot be shown, right click, select Save Target As to download');
    return false'>
  Text for link</a>
   <a href="simpleFile.ext">Text for Link</a>

查看或下载:

<a href='downloadFile.ext'
   onclick="alert('This file cannot be shown, right click, select Save Target As to download');
    return false'>
  Text for link</a>
   <a href="simpleFile.ext">Text for Link</a>


在第二种情况下,用户可以在默认情况下单击并让浏览器处理,或者右键单击并保存

发布另一个答案。。。因为在注释中格式不起作用

我想到一个想法。。。使用JavaScript的方法

下载:

<a href='downloadFile.ext'
   onclick="alert('This file cannot be shown, right click, select Save Target As to download');
    return false'>
  Text for link</a>
   <a href="simpleFile.ext">Text for Link</a>

查看或下载:

<a href='downloadFile.ext'
   onclick="alert('This file cannot be shown, right click, select Save Target As to download');
    return false'>
  Text for link</a>
   <a href="simpleFile.ext">Text for Link</a>


在第二种情况下,用户可以在默认情况下单击并让浏览器处理,或者右键单击并保存

没错。很好地解释了发生的事情。这进一步强化了我必须选择一种方式。可以将其指定为附件,也可以不指定。很好地解释了发生的事情。这进一步强化了我必须选择一种方式。可以将其指定为附件,也可以不指定。