Я бы хотел заблокировать запросы к любому .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 когда-либо попадал в контроллер.
Я знаю, что могу сделать это, подключив Application_BeginRequest в Global.asax и выбрасывая новое исключение HttpException (404, «Not Found»), но это не совсем элегантное решение, которое я ищу.
Я действительно надеялся, что это сработает:
routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");
Но это не так.
ПРИМЕЧАНИЕ. Ответ Шона Линча прекрасно работает, но мне все равно очень хотелось бы решение на основе System.Web.Routing или System.Web.Mvc. Таким образом, я могу позволить своим пользователям добавлять свои собственные исключения во время выполнения.