Hasta el momento (por razones de brevedad) He una ruta en global.asax registrada como esto:ASP.NET MVC Las rutas por defecto accesible a través de rutas de las áreas
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
Donde "RootNamespace" es
var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });
LowercaseRoute hereda de Route y solo hace que todas las rutas sean minúsculas. También tengo un área registrada como esto:
context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
DataTokens = adminNamespace
});
Dónde adminNamespace es otro espacio de nombres, misma idea que en la ruta por defecto, pero con el espacio de nombres derecha. Esto funciona bien, puedo acceder a las direcciones URL que se ven así:
http://example.com/contact <- default route, "Home" controller
http://example.com/admin/account <- area route, "Account" controller, default "List" action
El problema es que este
http://example.com/admin/home/contact
también funciona. No hay un controlador "doméstico" con una acción de "contacto" debajo del área "admin". Tira de la página derecha de "/ contacto" pero con la URL "/ admin/home/contact".
¿Hay alguna forma de evitar que esto suceda?
Gracias.
Agregando "UseNamespaceFallback = false" al área de administración El diccionario DataTokens resolvió el problema. ¡Gracias! – pbz