asp.net-mvc - español - asp.net mvc 7
Definición de rutas de URL personalizadas en ASP.Net MVC (1)
Necesita cambiar el orden de las rutas.
routes.MapRoute(name: "Homepage", url: "", defaults: new { controller = "Restaurants", action = "Search" });
routes.MapRoute(name: "About", url: "about", defaults: new { controller = "Home", action = "About" });
routes.MapRoute(name: "Disclaimer", url: "disclaimer", defaults: new { controller = "Home", action = "Disclaimer" });
routes.MapRoute(name: "Contact", url: "contact", defaults: new { controller = "Home", action = "Contact" });
routes.MapRoute(name: "Api", url: "api/{action}", defaults: new { controller = "Api" });
routes.MapRoute(name: "RestaurantLocationDetails", url: "{id}/{restaurantSlug}/{locationSlug}", defaults: new { controller = "Restaurant", action = "LocationDetails" });
routes.MapRoute(name: "RestaurantDetails", url: "{id}/{slug}", defaults: new { controller = "Restaurant", action = "Details" });
Las rutas se procesan en el orden en que se agregan a la lista de rutas.
Por ejemplo: api/action
también coincide con la ruta de RestaurantDetails
ya que solo hay dos parámetros en los parámetros de url de ruta.
Por lo tanto, debe ir de lo específico a lo general. En general, si tiene el mismo número de parámetros en dos definiciones de ruta, entonces la primera ruta añadida será la elegida.
Tengo las siguientes rutas definidas:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(name: "Homepage", url: "", defaults: new { controller = "Restaurants", action = "Search" });
routes.MapRoute(name: "About", url: "about", defaults: new { controller = "Home", action = "About" });
routes.MapRoute(name: "Disclaimer", url: "disclaimer", defaults: new { controller = "Home", action = "Disclaimer" });
routes.MapRoute(name: "Contact", url: "contact", defaults: new { controller = "Home", action = "Contact" });
routes.MapRoute(name: "RestaurantDetails", url: "{id}/{slug}", defaults: new { controller = "Restaurant", action = "Details" });
routes.MapRoute(name: "RestaurantLocationDetails", url: "{id}/{restaurantSlug}/{locationSlug}", defaults: new { controller = "Restaurant", action = "LocationDetails" });
routes.MapRoute(name: "Api", url: "api/{action}", defaults: new { controller = "Api" });
}
Encontré algunas rutas para dar un 404, así que instalé el paquete RouteDebugger NuGet.
Muestra lo que espero para las primeras 4 rutas, pero en las últimas 3 rutas todavía obtengo un 404 y lamentablemente el Route Depurador no aparece en la parte inferior de la página. Esperaba que me mostrara qué bits se asignaron, pero No consigo nada. Todos los puntos de vista existen.
Así que supongo que estoy cometiendo un error con las definiciones de ruta. ¿Alguien puede arrojar algo de luz sobre esto? Además, ¿cómo puedo obtener Route Debugger para mostrarme cómo la URL se asigna al diccionario de ruta para aquellas páginas que devuelven un 404?