Me gustaría bloquear las solicitudes a cualquier .php o .cgi independientemente de la información de la ruta.¿Cómo bloqueo las solicitudes para todas las páginas * .php, * .cgi, etc. desde dentro de una aplicación ASP.NET MVC 1.0 alojada en IIS7?
Por ejemplo, cuando la siguiente dirección se utiliza:
http: // mysite /Admin/Scripts/Setup.php
Coincide con una ruta existente:
routeCollection.MapRoute("Admin", "admin/{controller}/{action}/{uid}/{*pathInfo}", new { controller = "Admin", action = "Index", uid = "" });
Sin embargo, no hay controlador para las secuencias de comandos, por lo que MVC arroja lo siguiente:
El IControllerFactory '' no devolvió un controlador para un controlador llamado 'scripts'.
Lo que realmente prefiero es que la solicitud se resuelva simplemente con un error grave antes de que MVC llegue al controlador.
Sé que puedo hacer esto conectando Application_BeginRequest en Global.asax y lanzando una nueva HttpException (404, "No encontrado") pero esa no es exactamente la solución elegante que estoy buscando.
Me esperaba que esto funcionaría:
routeCollection.IgnoreRoute("{resource}.php/{*pathInfo}");
pero no es así.
NOTA: La respuesta de Sean Lynch funciona muy bien pero todavía me gustaría una solución basada en System.Web.Routing o System.Web.Mvc. De esa forma puedo permitir a mis usuarios agregar sus propias exclusiones en tiempo de ejecución.
Esto no es una respuesta, pero ciertamente jugaría con el depurador de rutas de Phil Haack. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx Le permitirá saber qué ruta toma la url que está probando. También me gustaría investigar la desactivación de la asignación de archivos existente – MarkKGreenway