MVC3路由设置匹配小结

mvc3中,通过url进行路由匹配时,会根据在注册路由时的顺序按序逐个匹配,匹配后根据url中的controller、action和参数执行对应controller中的action方法,没有匹配则会404。然而,如果url从路由表中匹配到了,但却没有对应的controller,也会返回404。所以,在添加路由时,需要根据路由的url格式加以区别,把匹配度高的路由尽量放到最后,把后来添加的路由放在前面。

注册路由方法:

public static Route MapRoute(
    string name,                           //路由在路由列表里的唯一名字(两次MapRoute时name不能重复)
    string url,                                 //路由匹配的url格式
    Object defaults,                      //路由url {占位符} 的默认值
    Object constraints,                //url的 {占位符} 的约束
    string[] namespaces            //这个是用于设置路由搜索的控制器命名空间!
)

在创建好mvc3项目时,系统会自动注册一个默认的路由,如下:

routes.MapRoute(
       "Default", // 路由名称
        "{controller}/{action}/{id}", // 带有参数的 URL
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);

其中带{}的表示参数匹配,如果不带则表示字符串匹配,其中需要注意的是,默认值中,我们必须设置controller和action的默认值

在进行访问时,只要url地址能够匹配到路由,系统则按照路由规则和请求的内容来访问,否则就按照路由的默认值来访问。

假设,我们的路由是默认的,即Default,当我们的url为:http://localhost:port/Route/Fun时,系统会根据url匹配到的路由的controller,即RouteController中执行Fun方法,默认值将不起作用;而当我们的url为:http://localhost:port时,系统会按照匹配的路由的默认值来执行,即执行HomeController中的Index方法。

同样的,在定义路由时,url格式中还可以不包含{controller},形式如下:

routes.MapRoute(
       "Route", // 路由名称
        "{action}", // 带有参数的 URL
        new { controller = "Route1", action = "Index" } // 参数默认值
);

这个路由很简单,名称为Route,路由规则格式为:{action},控制器的默认值为Route1。当我们的url形如:http://localhost:port/Index时,系统也会匹配到名为Route的路由,控制器为Route1,接下来的流程就一样了。(注:Route在Default之前)

以上为参数匹配的方式。其实,路由还可以进行使用字符串匹配的方式。假设有如下定义的路由:

routes.MapRoute(
       "字符串匹配路由",
        "String/Sub/{id}", //路由url
        new { controller = "Page", action = "GetContent", id= UrlParameter.Optional }
);

此时,当我们的url形如:http://localhost:port/String/Sub/2时,系统得到匹配路由“字符串匹配路由”,同时会调用controller为Page,Action为GetContent的方法,参数id值为2。当然,这个路由必须在路由url为{controller}/{action}/{id}的前面,或是注册路由中不存在对应的参数匹配的路由的情况下,即"{controller}/{action}/{id}", //路由url。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值