No necesita perder la ruta predeterminada. La clave para evitar que sus rutas interfieran entre sí es ordenarlas para que las reglas más específicas precedan a las menos específicas. Por ejemplo:
// Your specialized route
routes.MapRoute(
"Page",
"Page/{slug}",
new { controller = "Page", action = "Index" }
);
// Default MVC route (fallback)
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Luego, su PageController se vería así:
using System.Web.Mvc;
public class PageController : Controller
{
public string Index(string slug)
{
// find page by slug
}
}
Dicho esto, me gustaría fuertemente consejo que hacer esto en su lugar:
// Your specialized route
routes.MapRoute(
"Page",
"Page/{id}/{slug}",
new { controller = "Page", action = "Index", slug = UrlParameter.Optional }
);
// MVC's default route (fallback)
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Y su PageController :
using System.Web.Mvc;
public class PageController : Controller
{
public string Index(int id)
{
// find page by ID
}
}
Al incluir la ID de la página al comienzo de su URL (como StackOverflow) o al final, puede simplemente ignorar la babosa y, en su lugar, recuperar sus páginas por ID. Esto le ahorrará un montón de dolores de cabeza si sus usuarios cambian el nombre de la página. He pasado por esto y es doloroso; Básicamente, debe mantener un registro de todos los nombres que sus páginas han tenido en el pasado, solo para que sus visitantes/motores de búsqueda no obtengan un 404 cada vez que se renombra una página.
Espero que esto ayude.
También http://stackoverflow.com/questions/973205/asp-net-mvc-default-route –