一,基本概念:
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