众所周知,ASP.NET MVC有一套自己的路由系统。这套路由系统是在原来的ASP.NET 路由系统上扩展过来的。今天这篇文章就来聊聊MVC路由系统中非常关键的一些对象。
ASP.NET MVC路由系统主要由以下几个核心对象:
1.RouteCollection(RouteCollextionExtentions)
2.RouteTable
3.RouteData
4.Route:RouteBase
5.URLRouteMoudle
下面我们就来一一介绍这些对象
RouteCollection:这个是提供ASP.NET路由的路由集合,而MVC的路由类RouteCollectionExtentions中的方法是从RouteCollection扩展过来的扩展方法,它负责MVC的路由工作。下面是这个类的代码。
public static class RouteCollectionExtensions
{
public static VirtualPathData GetVirtualPathForArea(this RouteCollection routes, RequestContext requestContext, RouteValueDictionary values);
public static VirtualPathData GetVirtualPathForArea(this RouteCollection routes, RequestContext requestContext, string name, RouteValueDictionary values);
public static void IgnoreRoute(this RouteCollection routes, string url);
public static void IgnoreRoute(this RouteCollection routes, string url, object constraints);
public static Route MapRoute(this RouteCollection routes, string name, string url);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults);
public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces);
public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);
}
从上面的定义可以看得出来, RouteCollectionExtentions类中的成员都是扩展成员。MapRoute方法是核心,该方法向路由表中注册路由。IgnoreRoute向路由表中注册忽略路由。
RouteTable:路由表。顾名思义,这个类存储了我们注册的路由。而且这个对象在整个网站中只能有一个。接下来我们看一下这个类的代码(这是我用反编译工具编译出来的代码)。
public class RouteTable
{
// Fields
private static RouteCollection _instance;
// Methods
static RouteTable();
[TargetedPatchingOptOut("Performance critical to inline t