0

如果我的网站目录中有文件:

~/documents/file1.pdf

如何强制对以下 url 的请求通过控制器:

www.mydomain.com/documents/file1.pdf

然后控制器看起来像

[Authorize]
public DocumentsController : Controller
{
     public FileResult Index(string fileName)
     {
          //Check user has permission to view file



          return File(...);
     }
}
4

2 回答 2

0

这并不难,只要你能做出一些假设。

首先,按照您的建议创建您的操作方法:

[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 模块):

<httpRuntime relaxedUrlToFileSystemMapping="true" />
于 2013-03-31T07:17:00.533 回答
0

我通过将文档目录放在 App_Data 文件夹中来解决这个问题,这样公众就无法访问它,并使用数据库中的文档 ID 来检索相关信息,例如

/文件/21

我认为无论如何我更喜欢这种方法而不是我最初的计划,因为它更彻底地抽象了路径的标识和文档标题,因为控制器路径可以是任何东西并且不必映射到物理目录路径。

于 2013-03-31T06:37:05.173 回答