Pregunta

Tengo un sitio de noticias con artículos etiquetados en categorías.

Mi controlador se llama " Categoría " y esta URL:

  

http://mysite.com/Category/Sport

pasa Sport a la acción Index en el controlador Categoría .

Quiero permitir las siguientes URL:

  

http://mysite.com/Sport/Hockey
   http://mysite.com/Sport/Football
   http://mysite.com/Science/Evolution

Que pasa toda la información de la categoría a la acción Índice en el controlador Categoría .

¿Cómo creo una ruta para todos que maneje todo esto y los lleve a la categoría?

¿Fue útil?

Solución

Hay una buena respuesta a mi pregunta en esta línea aquí .

Otros consejos

Puedes hacerlo así:

routes.MapRoute("Default", "{category}/{subcategory}",
    new { controller = "CategoryController", action = "Display", id = "" }
);

y luego en tu controlador:

public class CategoryController : Controller
{
    public ActionResult Display(string category, string subcategory)
    {
        // do something here.
    }
}

No utilice la ruta anterior para TODAS las rutas (no puede tener una página Acerca de, etc., a menos que especifique rutas explícitas antes de la anterior).

Sin embargo, podría incluir una restricción personalizada para limitar la ruta solo a las categorías existentes. Algo 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;
    }
}

Que usas en tu ruta como esta:

routes.MapRoute("Default", 
    "{category}/{subcategory}",
    new { controller = "CategoryController", action = "Display", id = "" },
    new { categoryExists = new OnlyExistingCategoriesConstraint() }
);

De esa manera, no interferirá con tus otras rutas definidas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top