Как использовать специальные параметры маршрута MVC? - PullRequest
0 голосов
/ 06 января 2011

Мне известны специальные параметры {controller} и {action}, но я видел, что блоги / сообщения добавляли специальные параметры, такие как {controller}/{action}/{*id}.Кроме звездочки, какие еще специальные символы доступны для использования и как их использовать?

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

routes.MapRoute( "Blog",
                 "Blog/{d}/{m}/{y}",
                 new { controller = "Blog", action = "Post" },
                 new { d = @"\d{1,2}", m = @"\d{1,2}", y = @"\d{4}" }
);

В объекте ограничения d , m и y все соответствуютпараметры в URL, что имеет смысл.Однако в некоторых блогах, которые я читал, меня раздражают, когда люди начинают добавлять ограничения на несуществующие параметры, такие как

contentType = new ContentTypeConstraint(ConstraintContentType.JSON)

или

IsRootAction = new IsRootActionConstraint()

Какой объектcontentType и IsRootAction определены?Есть ли еще какие-либо свойства помимо этих двух?

ОБНОВЛЕНИЕ Я провел еще несколько поисков и обнаружил, что под капотом new { controller = "Blog"} преобразуется в RouteValueDictionary.Это в основном просто стенография.Параметры, которые мне были интересны (IsRootAction и ContentType), являются просто ключевыми именами словаря, не более того.

1 Ответ

0 голосов
/ 06 января 2011

Ограничения действия либо определены в платформе MVC, либо определены вашим кодом (предпочтительно в моделях) и реализуют интерфейс MVC IRouteConstraint.

См. В этом ответе пример того, как определяется ограничение действия, это относится конкретно к вашему вопросу о IsRootActionContraint.

Возникли проблемы с простым маршрутом MVC

Я не видел нотации {* ...}, общий синтаксис состоит в том, что каждое имя в скобках является извлеченным параметром из соответствующего URL.

...