无论路径信息如何,我都想阻止对任何 .php 或 .cgi 的请求。
例如,当使用以下 url 时:
http:// mysite /Admin/Scripts/Setup.php
它匹配现有路线:
routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });
但是没有脚本控制器,因此 MVC 抛出以下内容:
IControllerFactory '' 没有为名为 'scripts' 的控制器返回一个控制器。
我真正喜欢的是,在 MVC 到达控制器之前,该请求只是遇到了硬失败。
我知道我可以通过在 Global.asax 中挂钩 Application_BeginRequest 并抛出一个新的 HttpException(404, "Not Found") 来做到这一点,但这并不是我正在寻找的优雅解决方案。
我真的希望这会奏效:
routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");
但事实并非如此。
注意:Sean Lynch 的回答效果很好,但我仍然非常想要基于 System.Web.Routing 或 System.Web.Mvc 的解决方案。这样我就可以允许我的用户在运行时添加他们自己的排除项。