我如何使用MVC路由特殊参数?

时间:2011-01-05 21:30:25

标签: asp.net-mvc-2 asp.net-mvc-routing

我知道特殊参数{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()

哪个对象定义为contentTypeIsRootAction?除了这两个之外还有其他属性吗?

UPDATE 我已经做了一些搜索,我发现在引擎盖下new { controller = "Blog"}被转换为RouteValueDictionary。这基本上只是简写。我很好奇的参数(IsRootAction和ContentType)只是字典的关键名称,仅此而已。

1 个答案:

答案 0 :(得分:0)

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

有关如何定义Action Constraint的示例,请参阅此答案,这特别针对您关于IsRootActionContraint的问题。

Having trouble with a simple MVC route

我没有看到{* ...}表示法,一般语法是每个卷括号的名称都是匹配网址中提取的参数。