如何将filename.pdf追加到浏览器的url

时间:2011-07-29 05:43:13

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

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

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

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

感谢,
 michaeld

1 个答案:

答案 0 :(得分:2)

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

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

现在,只有当网址以“.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结尾。

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