为什么我的IgnoreRoute不起作用?

时间:2011-08-23 05:27:11

标签: asp.net-mvc-3

我想阻止用户访问我的“〜/ Content / ...”文件夹,我将其编写为“Global.asax.cs”,并将此行代码放在其他所有路径的顶部 routes.IgnoreRoute("Content/{*pathInfo}");
但它不起作用。实际上,用户可以通过在浏览器中键入URL来查看内容文件夹中的每个文件。 我错过了什么吗?

2 个答案:

答案 0 :(得分:4)

你怎么知道它不起作用?举个例子。

您可能已将其放在路由表中。因此,请尝试将其向上移动,以便将其添加到路由表首先。路径集合是有序的路线列表。

另请尝试:Routes.IgnoreRoute("Content/");,但您的忽略版本也是正确的,它应该有用。

最后,当你说用户可以看到Content文件夹的所有内容时,我不知道你的意思:这不是重点吗?用户必须能够从文件夹下载文件,我们通常只需要MVC忽略进入框架的请求,以便IIS可以直接提供这些文件。

或者您的意思是启用了目录浏览,并且您要禁用它:在这种情况下,请转到IIS管理器,选择您的网站并查找目录浏览选项并按照here所示禁用它。

答案 1 :(得分:2)

路由约束无法解决您的问题。处理请求中有3个重要步骤:

  1. IIS得到了请求。
  2. IIS监视文件系统并搜索与文件的直接对应关系
  3. 如果IIS没有找到任何文件 - 它会向ASP.NET MVC发出处理请求。
  4. 因此,您需要将文件夹安全性配置为禁止直接访问文件,但允许访问应用程序,如here。 但我不建议保护应该共享的文件夹。我不相信您的网站不应该显示图像:)如果您有一些安全的内容,您需要创建另一个文件夹。