Отображение маршрута от корневого URL до динамического названия продукта / идентификатора - PullRequest
1 голос
/ 16 августа 2011

Я разрабатываю приложение MVC 3

Я хочу, чтобы URL-адрес был примерно таким:

/ some-product-name-go-here-here-4726482648
(с 4726482648являющийся идентификатором продукта)

У меня есть другие страницы, такие как:

/ имя-категории
(позволяет просматривать по категориям)

/ about

и т.д ...

Как я могу настроить маршрутизацию, чтобы разрешить это?

Ответы [ 2 ]

3 голосов
/ 18 августа 2011

Вы наверняка использовали бы здесь RouteConstraint

, в ваших маршрутах вы могли бы иметь что-то вроде этого:

routes.MapRoute("CustomProductUrl",
                 "{Product}",
                 new { controller = "Product", action = "Index" },
                 new { Product= new ProductConstraint() }
                );

тогда в вашем классе ProductConstraint у вас будет что-то следующее:

    public class ProductConstraint : IRouteConstraint
    {

        public ProductConstraint ()
        {
        }

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            //do your logic in here to split the name and the id and amke sure it is valid data

            //if valid return true;
            //else false;
        }

    } 

, наконец, в сигнатуре метода действия Index (или действия в маршруте) возьмите строку - и затем разбейте ее и обработайте соответствующим образом

, дайте мне знать, если естьлюбые вопросы

Пол

1 голос
/ 16 августа 2011

Если вы можете сделать их немного другими, это будет очень просто.Например, если вы можете использовать следующую структуру URL:

/some-product-name-goes-here/4726482648 (notice the slash)
/category-name
/about

Следующие маршруты помогут:

routes.MapRoute("about", "about", ... )
routes.MapRoute("product", "{product}/{id}", ... )
routes.MapRoute("category", "{category}", ... )
...