您现在的位置是:首页 >

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

火烧 2021-12-30 13:43:57 1045
ASP.NET MVC 4框架揭秘:URL路由(3)    URL路由( )  在Glo al a ax中我们创建了一个基于指定URL模板( {co troller}/{actio } )的Route

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

     URL路由( )

  在Global asax中我们创建了一个基于指定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)

  {

  context PostResolveRequestCache += OnPostResolveRequestCache;

  }

  protected virtual void OnPostResolveRequestCache(object sender EventArgs e)

  {

  HttpContextWrapper Context =

  new HttpContextWrapper(HttpContext Current)

  RouteData routeData = RouteTable Routes GetRouteData(Context)

  if (null == routeData)

  {

  return;

  }

  RequestContext requestContext = new RequestContext {

  RouteData = routeData HttpContext = Context };

  IHttpHandler handler =

  routeData RouteHandler GetHttpHandler(requestContext)

  Context RemapHandler(handler)

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

  }

  }

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

      返回目录ASP NET MVC 框架揭秘

      编辑推荐

      ASP NET开发培训视频教程

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

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

lishixinzhi/Article/program/net/201311/16110  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码