即使没有路由,也可以使用RouteExistingFiles阻止对现有文件的访问

时间:2010-03-28 09:49:58

标签: .net asp.net asp.net-mvc

在ASP.net MVC 2中,我可以使用routes.RouteExistingFiles = true;通过路由系统发送所有请求,即使它们存在于文件系统中。

通常情况下,最终会遇到"{controller}/{action}/{id}"路由并因无法找到控制器而引发异常。

我不想使用那条路线(我只有几个网址并且它们是专门映射的),但我仍然希望阻止访问文件系统。

基本上我想使用IgnoreRoute白名单页面。有内置的方法吗?

我目前的做法是仍然有一条路线"{*anything}",当它被击中时会产生一个404,但我只是想知道某些东西是否已内置?

1 个答案:

答案 0 :(得分:7)

这是ASP.NET MVC应用程序中Web.config授权的少数有效用途之一。 :)

我建议将RouteExistingFiles设置为false(这样路由和MVC管道不会处理这些请求,IIS和ASP.NET核心会这样做)。将您要拒绝访问的所有文件放入单个文件夹,然后将Web.config拖放到该文件夹​​中:

<configuration>
  <system.web>
    <authorization>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

这将阻止IIS和ASP.NET直接提供这些文件。