Asp.net mvc 4 MVC 4将目录中的文件映射到控制器操作,以确保对文档的授权访问
如果我的网站目录中有文件: ~/documents/file1.pdf 如何强制对以下url的请求通过控制器: www.mydomain.com/documents/file1.pdf 控制器将看起来像Asp.net mvc 4 MVC 4将目录中的文件映射到控制器操作,以确保对文档的授权访问,asp.net-mvc-4,controller,authorization,directory,Asp.net Mvc 4,Controller,Authorization,Directory,如果我的网站目录中有文件: ~/documents/file1.pdf 如何强制对以下url的请求通过控制器: www.mydomain.com/documents/file1.pdf 控制器将看起来像 [Authorize] public DocumentsController : Controller { public FileResult Index(string fileName) { //Check user has permission to
[Authorize]
public DocumentsController : Controller
{
public FileResult Index(string fileName)
{
//Check user has permission to view file
return File(...);
}
}
我将文档目录放在App_数据文件夹中,这样公众就无法访问它,并使用数据库中的文档ID检索相关信息,例如 /文件/21
我认为我更喜欢这种方法,因为它将路径和文档标题的标识抽象得更为彻底,因为控制器路径可以是任何东西,并且不必映射到物理目录路径。这并不困难,只要您可以做出一些假设 首先,按照您的建议创建您的行动方法:
[Authorize]
public DocumentsController : Controller
{
public FileResult Index(string fileName)
{
//Check user has permission to view file
return File(...);
}
}
接下来,创建一条管线:
routes.MapRoute(
name: "Documents",
url: "documents/{fileName}",
defaults: new { controller = "Documents", action = "Index" }
您可能需要通过在web.config中添加以下内容来放宽url验证要求(这仅适用于IIS7-8,但据我所知,IIS6可能需要http模块):
不幸的是,您无法将mvc路由映射到文件名(没有像.pdf这样的扩展名)
<httpRuntime relaxedUrlToFileSystemMapping="true" />