MVC 3 Custom Url Routing - PullRequest
       8

MVC 3 Custom Url Routing

1 голос
/ 26 января 2012

Я хочу создать собственный маршрут, так как по умолчанию mvc создает маршрут следующим образом:

domain.com / deals / detail / 5

, но в моем случае я хочу создатьпользовательский маршрут для него:

domain.com / tasty-food-in-paris

, поэтому он должен искать подробное действие контроллера сделок с передачей ему значения id 5.

как я могу это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 января 2012

Этот маршрут отображает все URL одного сегмента в метод detail контроллера сделок и передает ему один строковый аргумент dealName:

routes.MapRoute(
        null,
        "{dealName}",
        new { controller = "deals", action = "detail" }            
    );

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

При таком подходе вы должны искать свою сделку по имени, что может быть неприемлемым. Так много приложений используют гибридный подход и включают в URL имя и идентификатор, например:

domain.com/deals/5-HereComesTheLongName

Затем вы можете использовать такой маршрут, чтобы получить идентификатор и, при желании, имя:

routes.MapRoute(
        null,
        "{id}-{dealName}",
        new { 
          controller = "deals", 
          action = "detail", 
          dealName = UrlParameter.Optional
        }
    );
0 голосов
/ 26 января 2012

Вы можете сделать это, определив пользовательский маршрут в функции Global.asax RegisterRoutes.Вам нужно будет добавить этот маршрут после маршрута по умолчанию, чтобы в случае сбоя шаблона идентификатора действия контроллера по умолчанию он попытался выполнить окончательный маршрут.

В качестве примера можно было бы использовать следующее:

        routes.MapRoute(
            "RouteName",
            "/{uri}", //this is www.domain.com/{uri}
            new { controller = "Controller", action = "ByUri" },
            new { uri = @"[a-z\-0-9]+" } //parameter regex can be tailored here
        );

После регистрации этого маршрута вы можете добавить новый пользовательский контроллер для обработки этих маршрутов, добавить действие, которое будет обрабатывать это, и принять строку в качестве параметра.

В этом новом действии вы можете создать базу данных.lookup или некоторые жестко закодированные валидные маршруты, которые возвращают Views.

...