熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 12:32:14  來源: .NET編程 

    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++音頻/視頻技術開發與實戰


From:http://tw.wingwit.com/Article/program/net/201311/16110.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.