Puede hacerlo de esta manera:
routes.MapRoute("Default", "{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" }
);
y luego en su controlador:
public class CategoryController : Controller
{
public ActionResult Display(string category, string subcategory)
{
// do something here.
}
}
No que cualquier la ruta anterior se utilizará para todas las rutas (no se puede tener una página Acerca de, etc. a menos que especifique rutas explícitas antes que la anterior).
Sin embargo, podría incluir una restricción personalizada para limitar la ruta a solo las categorías existentes. Algo así como:
public class OnlyExistingCategoriesConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
var category = route.DataTokens["category"];
//TODO: Look it up in your database etc
// fake that the category exists
return true;
}
}
¿Qué se utiliza en su ruta como esta:
routes.MapRoute("Default",
"{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" },
new { categoryExists = new OnlyExistingCategoriesConstraint() }
);
De esa manera que no interfiera con sus otras rutas definidas.
made jmcd ... eso me puso en el camino correcto y me di cuenta del resto. (stackoverflow es genial) – WayneDV
Las respuestas de enlace único se desaconsejan en SO. – spender