×

MVC

ASP.NET MVC框架之URL Routing(四)

管理员 管理员 发表于2010-07-29 10:15:14 浏览2654 评论0

抢沙发发表评论

一,基本概念:

1,路由的组件是System.Web.Routing,它是同.net 3.5 sp1一起发布的;所以此组件不开放源代码。
2,在ASP.NET webform也可以使用该组件;
2,ASP.NET MVC中对其进行了扩展,定义规则,使用新的“MapRoute”辅助方法,它提供了极其简单的句法,但能做同样的事。

二,Routing的作用:

从上图可以看出,Routing用于
1,定义如何选择Controller类,
2,定义调用哪个Action方法,
3,以及从URL/Querystring中自动解析变量值,并作为参数传递给方法。
下一步,控制器会执行对应的方法。

三,Routing的配置:

1,配置。通常,我们通过在Global.asax文件中的Application_Start事件中添加routes来配置Routing规则,
Global.asax.cs文件中的代码:
public static void RegisterRoutes(RouteCollection routes)
        {
            //忽略对.axd文件的Route,也就是和WebForm一样直接去访问.axd文件
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route 名称
                "{controller}/{action}/{id}", // 带有参数的URL
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值,id为可选参数
                 //在URL没有指定时controller = Home, action = Index ,id=""
            );
            //可以通过routes.MapRoute()添加多个规则,
            //规则的顺序很重要,根据Route的定义顺序来自上而下匹配的,找到符合的就不向下执行了。

        }

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //在程序启动的时候注册我们前面定义的Route规则
            RegisterRoutes(RouteTable.Routes);
        }

2,规则对应的URL:
在一个route中,通过在大括号中放一个占位符来定义( { and } ),route定义中不在大括号中的信息则作为常量值。
下图为{controller}/{action}/{id}规则下,不同的URL请求的返回值。


另外,还可以使用星号(*)匹配不确定个数的参数,这会匹配URL后面所有的剩余的参数。例如:
query/{queryname}/{*queryvalues}规则对于url:
query/aspnetmvc/preview5/routing ,则queryvalues参数匹配的参数为值为 preview5/routing。

3,参数说明:
MapRoute()辅助方法是重载了的,可以接受2,3,或4个参数(路径名字,URL句法,URL默认参数,URL参数正则表达式约束)。
例如:
routes.MapRoute(
    
"Default",    //名称随便命名,但是上下文中不能重复                                          
    
"{controller}/{action}/{id}",      //URL句法                     
    
new { controller = "Home", action = "Index", UrlParameter.Optional },  //URL默认参数,
    
new { id = @"[\d]*" } //id必须为数字,更复杂的约束可以通过扩展来实现
);

四,Routing与URL Rewrite的区别:

       1,URL Rewrite:改变程序处理的URL
       2,URL Route:根据URL的规则选择执行
       3,两者执行机制不同
       4,在某些情况下可以产生同样结果
        5,URL Route更像是一种基础支持
            – 适合用于开发基于ASP.NET架构的新框架
---------------------------------------------------------------------
参考资源:
ASP.NET MVC 入门3、Routing
http://www.cnblogs.com/QLeelulu/archive/2008/10/03/1303612.html
ASP.NET MVC框架开发系列课程(3):URL导向
http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032378240&Culture=zh-CN
ASP.NET MVC 源码更新预览
http://msdn.microsoft.com/zh-cn/dd458700.aspx
一步一步学asp.net_mvc_中文版.pdf
http://wenku.baidu.com/view/2be68e6a561252d380eb6e0a.html

群贤毕至

访客