【问题标题】:how to append filename.pdf to url to browser如何将filename.pdf附加到浏览器的url
【发布时间】:2011-10-15 16:41:04
【问题描述】:

我的控制器操作方法将 pdf 文件返回为

public FileContentResult GetPDF(string filename)
        {FileContentResult filecontent= new FileContentResult(Contents, "application/pdf");
               HttpContext.Response.AddHeader("Content-Disposition", "inline; filename=" + filename);
               return filecontent;
}

现在,它没有在浏览器选项卡中打开,所以我想在最后以 filename.pdf 的形式返回 url,这就是我可以在浏览器选项卡中打开 pdf 的方式。那么我该如何将它添加到我现有的操作方法中。

谢谢,
迈克尔

【问题讨论】:

    标签: asp.net-mvc pdf http-headers pdf-generation


    【解决方案1】:

    从服务器更改浏览器 url 并同时下载文件内容是不可能的。浏览器希望从它发出请求的 url 接收结果,因此您在提供文件后无法更改它。因此,您必须拥有以“.pdf”结尾的 url 的处理程序,并使浏览器从该 url 请求文件,该文件已经以“.pdf”结尾。使用 asp.net mvc,这很简单。在您的路线配置中,您现在应该有类似于

    routes.MapRoute("PdfFile",
                    "DownloadFile/GetPDF/{fileName}",
                    new { controller = "DownloadFile", action = "GetPDF" });
    

    现在,将路由更改为仅在 url 以“.pdf”结尾时匹配

    routes.MapRoute("PdfFile",
                    "DownloadFile/GetPDF/{fileName}.pdf",
                    new { controller = "DownloadFile", action = "GetPDF" });
    //note the ending .pdf at the end of the route
    

    如果您已将系统设计为使用 ActionLink 或其他帮助程序自动生成链接,并且没有手动编写链接,那么您应该已经获得了预期的结果 - 您现在下载文件的链接将自动生成以结束使用 .pdf。

    当浏览器(或通常发出请求的人)可以被告知它请求的资源已被移动到其他一些 url 时,http 中有一些技术。 asp.net mvc 也支持这一点,方法是返回 RedirectToAction 或类似的 actionResults。当浏览器收到重定向响应时,它会向该新 URL 发出另一个请求。在您的情况下,这可能已用于将浏览器重定向到以“.pdf”结尾的 url。但这里的关键点是,即使在重定向的情况下,您当然也必须处理以“.pdf”结尾的 url :)。因此,最好通过更改路由配置来摆脱这些重定向并最初生成已经指向所需 url 的链接。

    【讨论】:

      猜你喜欢
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      相关资源
      最近更新 更多