MVC3更改网址

时间:2013-03-03 08:02:28

标签: asp.net-mvc-3 url

我们有一个模块来生成和存储PDF格式的报告。

获取文档的网址,例如:

https://domain.com/Document/GetDocument?documentId=00000000-0000-0000-0000-000000000000

此网址将返回名称为Document_UserName_Date的文档。

但是,由于浏览器可以像Chrome一样查看PDF文件,因此可以在带有上述网址的浏览器标签中查看该文档。

因此,当用户尝试将该文档保存在他们的计算机中时,默认文件名(从url获取)为:https___domain.com.pdf而不是Document_UserName_Date.pdf,正如我们预期的那样。 所以我在想,如果我可以将网址更改为:

https://domain.com/Document/Document_UserName_Date.pdf

我的问题将得到解决。

1 个答案:

答案 0 :(得分:2)

为了避免文档显示在浏览器中,但用户直接提示下载它,您可以使用Content-Disposition标题设置为attachment

Content-Disposition: attachment; filename="Document_UserName_Date.pdf"

这可以通过简单地将文件名作为第三个参数传递给File overload:

来完成
public ActionResult GetDocument(Guid documentId)
{
    byte[] document = GetDocument(documentId);
    return File(document, "application/pdf", "Document_UserName_Date.pdf");
}

更新:

如果您希望用户在浏览器中内嵌查看文档,则可以使用路由并定义以下路径:

routes.MapRoute(
    "ViewPdfRoute",
    "document/{id}/{name}.pdf",
    new { controller = "Home", action = "GetDocument" }
);

并在您的控制器操作中:

public ActionResult GetDocument(Guid id, string name)
{
    byte[] pdf = GetDocument(id);
    return File(pdf, "application/pdf");
}

最后你可以申请这样的文件:

http://domain.com/document/0DF7E254-0576-4BC0-8B05-34FC0F5246A2/document_username_date.pdf
相关问题