2011-08-23 127 views
4

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

回答

4

你是怎么知道它不起作用的?举例说明。

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

也试试这个:Routes.IgnoreRoute("Content/");,但你的版本忽略也是正确的,它应该工作。

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

或者您的意思是启用了目录浏览功能,并且您希望禁用该功能:在这种情况下,请转到IIS管理器,然后选择您的网站并查找目录浏览选项并将其禁用,如here所示。

+0

我把它放在每一个其他路线的顶部(不起作用)并且写下你建议的路线(不再工作)。通过“不起作用”我的意思是当使用在浏览器中输入'/ Content/Site.css'时,我的CSS文件将显示在浏览器中,并且我想忽略此行为 – Rzassar

+0

@Rzassar如果您希望浏览器加载CSS并使用它来呈现你的页面,你不能阻止用户在浏览器中显示CSS,这是根本不可能的... – Jon

+0

@Rzassar:在地址栏中输入'/ Content/Site.css'并看到样式表是正常的。它发生在互联网上的每个**网站上,只需转到任何网站并使用萤火虫,找到其样式表的链接并将其输入到adderssbar并查看。 – Zasz

2

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

  1. IIS获得请求。
  2. IIS在文件系统中查看并搜索与文件的直接对应关系
  3. 如果IIS没有找到任何文件 - 它向ASP.NET MVC提供处理请求。

因此,您需要将文件夹安全性配置为禁止直接访问文件,但允许访问应用程序,如here。 但我不建议保护文件夹,应该共享。我不相信你的网站不应该有图像显示:)如果你有一些安全的内容,你需要创建另一个文件夹。

+0

你的意思是我不能忽略从my.css文件和其他图像的访问只是通过编写一些'Routes.Ignore()'? – Rzassar

+1

我的意思是你应该分开你不希望用户有能力下载的文件和用户必须有能力下载的文件。您不能禁止未经授权的用户“通过网址”下载图像,并同时返回带有“图像”的用户页面,因为此图片浏览器也请求“通过网址”。 –

+0

好吧!但是我的css文件呢?它位于〜/ Content/Site.css,我想阻止这个文件被用户看到。有没有像使用IgnoreRoute()那样简单的解决方案,其他的“配置文件夹安全性”? – Rzassar