2014-01-28 10 views
4

Это мой путь конфигурация:маршрут ограничения asp.net MVC

routes.MapRoute(
      name: "AdsCategories", 
      url: "Ads/{key}", 
      defaults: new { controller = "Ads", action = "Index" }, 
      //constraints: new { key = }, 
      namespaces: new string[] { "Vprok.Controllers" } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[] { "Vprok.Controllers"} 
     ); 

Как создать ограничение "AdsCategories"? Мне нужно использовать маршрут по умолчанию, если действие в контроллере «Объявления» == {ключ}.

ответ

9

Итак, в основном если {key} - это действующее действие, которое вы хотите, чтобы его обрабатывали по умолчанию, вместо использования действия Index на контроллере Ads?

Для того, чтобы достичь этого можно перечислить все возможные действия в главных сдерживающих:

routes.MapRoute(
    name: "AdsCategories", 
    url: "Ads/{key}", 
    defaults: new { controller = "Ads", action = "Index" }, 
    constraints: new { key = @"^create|update|delete" }, 
    namespaces: new string[] { "Vprok.Controllers" } 
); 

В этом примере AdsCategories маршрут будет соответствовать только если URL не ads/create или ads/update или ads/delete. Например, ads/foobar будет соответствовать.

+0

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

+0

В этом случае вы можете написать собственное ограничение: http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs, где вы будете динамически проверять, является ли действие существует или нет. Очевидно, что это будет намного медленнее, так как это будет необходимо для оценки по каждому запросу. Я бы пошел с маршрутом регулярного выражения. –

1

принять следующий код из:

routes.MapRoute(
      name: "AdsCategories", 
      url: "Ads/{key}", 
      defaults: new { controller = "Ads", action = "Index" }, 
      //constraints: new { key = }, 
      namespaces: new string[] { "Vprok.Controllers" } 
     ); 

просто создать индекс ActionResult на объявлениях контроллера и добавить параметр ID к нему! DONE

Смежные вопросы