我的控制器操作方法将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
答案 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的链接。