Asp.net mvc 2 如何使用MVC路线特殊参数?

Asp.net mvc 2 如何使用MVC路线特殊参数?,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc 2,Asp.net Mvc Routing,我知道特殊参数{controller}和{action},但我看到博客/帖子中加入了特殊参数,如{controller}/{action}/{*id}。除了星号,还有哪些特殊字符可以使用,我将如何使用它们 除此之外,我对如何使用路线约束感到困惑。一个对我有意义的通用地图是 routes.MapRoute( "Blog", "Blog/{d}/{m}/{y}", new { controller = "Blog", action

我知道特殊参数
{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}" }
);
在约束对象中,dmy都对应于URL中的参数,这是有意义的。在我读过的一些博客上,当人们开始对不存在的参数施加约束时,比如

contentType = new ContentTypeConstraint(ConstraintContentType.JSON)

定义了哪些对象
contentType
IsRootAction
?除了这两处,还有别的地方吗

更新
我做了更多的搜索,发现在引擎盖下,一个
new{controller=“Blog”}
被转换成一个RouteValueDictionary。这基本上只是速记。我想知道的参数(IsRootAction和ContentType)只是字典的关键名称,仅此而已。

动作约束要么在MVC框架中定义,要么由您的代码(最好是在模型中)定义并实现MVC接口IRouteConstraint

有关如何定义动作约束的示例,请参见此答案,这特别说明了您关于IsRootActionContraint的问题


我没有看到{*..}符号,一般的语法是每个带圆括号的名称都是从匹配URL中提取的参数。

我在这个项目中找到了对{…?}语法的引用:the?表示可选。不过,我还是不熟悉这种语法,自己也找不到这些控制字符的摘要,可能是不推荐的特性?
IsRootAction = new IsRootActionConstraint()