在vici mvc v2.0中,一个灵活地url映射机制是非常有必要的,因为它能让你把任何url映射到任何控制器(Controller),也可以在URL中添加参数传递。
url映射设置有下面俩种方法:
1、在Application's Init()方法中添加映射关系
2、在控制器类或者方法上添加[url]属性
一、Adding entries to the routing table manually
在Application's Init()方法中添加映射关系首先需要调用WebAppConfig.Router对象的AddRoute()方法
例如:
你可以在URL中插入标记{{tagname }},然后你就可以在控制器类,方法,或者参数中重复使用这些标记。
在上面的例子中,映射关系如下:
(the last 3 routes are default routes, explained below)
下面这些是映射到控制器类或者方法的简单例子:
二、 Default routes
可以通过WebAppConfig.Router.AddDefaultRoutes()方法添加一些默认映射到映射表。该方法需要知道page的扩展。例如,如果你要调用AddDefaultRoutes("aspx"),默认的映射为:
在以下的缺省路由传递空的扩展或空的结果:
三、 URL validation
它是可以使用正则表达式 验证 Url,例如:
WebAppConfig.Router.AddRoute("product/{id}" ,"Products" ,"Details" );
怎样才能让{id}一直是数字呢?方法就是在映射表中添加RouteValidator
默认情况下,如果映射关系验证失败,映射器会继续检查其他的映射,在上面的例子中,那也许不是我们愿意见到的。你可以在 RouteValidationAction中定义俩个参数。第一个参数是通过验证时执行的操作,第二个参数是失败时的操作。
RouteValidationAction枚举可以是以下值:
none是通过验证时的默认操作,Skip是验证失败时的操作
为了得到我们想要的结果,我们可以稍微改动以上例子:
五、Using the [Url] attribute
除了在 WebAppConfig.Router中添加映射关系,我们还可以在控制器类或者方法中添加:
在上面的例子中,他会这样添加到映射表中:
"~/products/overview"将会映射到Overview()方法和Products控制器类。
你也可以一次定义多个[url]
在上面的例子中,他会这样添加到映射表中:
下面是一些定义映射关系时的限制:
1、跟使用 AddRoute()方法不一样,你不能指定额外的参数。
2、你不能指定正则表达式
3、映射关系的检查顺序没有定义,然而通过属性定义映射关系要优先于Router.AddRoute方法
未完待续: