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

Mic*_*tum 5 .net asp.net asp.net-mvc

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

通常,这最终会击中"{controller}/{action}/{id}"路径并引发异常,因为无法找到控制器.

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

基本上我想使用IgnoreRoute白名单页面.有没有内置的方法来做到这一点?

我目前的方法是仍然有一条路线"{*anything}" 并在命中时生成404,但我只是想知道某些东西是否已内置?

Lev*_*evi 7

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

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

<configuration>
  <system.web>
    <authorization>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

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