asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

ASP.NET MVC 4框架揭秘:URL路由(3)


发布日期:2022年12月10日
 
ASP.NET MVC 4框架揭秘:URL路由(3)

URL路由(

在Globalasax中我们创建了一个基于指定URL模板({controller}/{action})的Route对象并将其添加到通过RouteTable的静态只读属性Routes所表示的全局路由表中

UrlRoutingModule

路由表的作用是对当前的HTTP请求的URL进行解析从而获取一个以Controller和Action名称为核心的路由数据即上面介绍的RouteData对象整个解析工作是通过一个类型为UrlRoutingModule的自定义HttpModule来完成的如下面的代码片段所示在实现了接口IHttpModule的UrlRoutingModule类型的Init方法中我们注册了HttpApplicataion的PostResolveRequestCache事件

public class UrlRoutingModule: IHttpModule

{

public void Dispose()

{}

public void Init(HttpApplication context)

{

contextPostResolveRequestCache += OnPostResolveRequestCache;

}

protected virtual void OnPostResolveRequestCache(object sender EventArgs e)

{

HttpContextWrapper httpContext =

new HttpContextWrapper(HttpContextCurrent)

RouteData routeData = RouteTableRoutesGetRouteData(httpContext)

if (null == routeData)

{

return;

}

RequestContext requestContext = new RequestContext {

RouteData = routeData HttpContext = httpContext };

IHttpHandler handler =

routeDataRouteHandlerGetHttpHandler(requestContext)

httpContextRemapHandler(handler)

}

}

当PostResolveRequestCache事件触发之后UrlRoutingModule通过RouteTable的静态只读属性Routes得到表示全局路由表的RouteDictionary对象然后调用其GetRouteData方法并传入用于封装当前HttpContext的HttpContextWrapper对象(HttpContextWrapper是HttpContextBase的子类)最终得到一个封装路由数据的RouteData对象如果得到的RouteData不为Null则根据该对象本身和之前得到的HttpContextWrapper对象创建一个表示当前请求上下文的RequestContext对象将其作为参数传入RouteData的RouteHandler的GetHttpHandler方法得到一个HttpHandler对象最后我们调用HttpContextWrapper对象的RemapHandler方法将得到的HttpHandler进行映射使之用于对当前HTTP请求的处理

返回目录ASPNET MVC 框架揭秘

编辑推荐

ASP NET开发培训视频教程

Microsoft NET框架程序设计视频教程

Java程序性能优化让你的Java程序更快更稳定

Visual C++音频/视频技术开发与实战

上一篇:ASP.NET MVC 4框架揭秘:URL路由(2)

下一篇:ASP.NET MVC 4框架揭秘:Controller的激活(1)