Два разных общих типа маршрута - PullRequest
2 голосов
/ 28 января 2010

В моем приложении ASP.NET MVC есть два (пока что) разных типа маршрутов, один из них: {controller} / {action} / {id}, а другой {controller} / {action} / {title}

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

        routes.MapRoute (
            "Default_Title_Slug",                                       // Route name
            "product/details/{title}",                          // URL with parameters
            new { controller = "product", action = "details", title = "" }      // Parameter defaults
        );

        routes.MapRoute (
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "site", action = "index", id = "" }  // Parameter defaults
        );

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

/controller/action?id=number

Теперь мне нужно добавить еще один вызов MapRoute для другого контроллера с сегментом {title} ...не хочу создавать новый маршрут для каждой конкретной записи, которую я придумаю в будущем ... есть ли общий маршрут, который я могу создать, чтобы отобразить / controller / action / title, который будет хорошо играть с / controller / action/ id route?

Спасибо,Кирон

1 Ответ

4 голосов
/ 28 января 2010

Вы можете сделать это с помощью ограничения маршрута, такого как регулярное выражение - очень аналогичный пример здесь . Что-то вроде:

routes.MapRoute (
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "site", action = "index", id = "" },
    new { id = @"\d+" }
);
routes.MapRoute (
    "Default_Title_Slug",
    "{controller}/{action}/{title}",
    new { controller = "product", action = "details", title = "" }
);
...