首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

System.Web.Routing 程式碼解析:Route 類別核心邏輯

     編輯:關於ASP.NET

Route 類別結構

封裝 ParsedRoute (已解析的路由規則),提供五大屬性:

  • Url:設定時即解析生成 ParsedRoute。
  • Defaults、Constraints、DataTokens:RouteValueDictionary 型別。
  • RouteHandler:IRouteHandler 實作。

兩大核心方法

GetRouteData (請求比對)

public override RouteData GetRouteData(HttpContextBase httpContext) {
    string virtualPath = httpContext.Request.AppRelativeCurrentExecutionFilePath.Substring(2) 
                        + httpContext.Request.PathInfo;
    RouteValueDictionary values = _parsedRoute.Match(virtualPath, Defaults);
    if (values == null) return null;
    if (!ProcessConstraints(httpContext, values, RouteDirection.IncomingRequest)) return null;
    // 建立 RouteData、填入 Values、DataTokens...
}

GetVirtualPath (URL 生成)

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) {
    BoundUrl url = _parsedRoute.Bind(requestContext.RouteData.Values, values, Defaults, Constraints);
    if (url == null) return null;
    if (!ProcessConstraints(requestContext.HttpContext, url.Values, RouteDirection.UrlGeneration)) return null;
    // 建立 VirtualPathData...
}

條件約束處理

ProcessConstraint 支援兩種約束型別:

  • IRouteConstraint 介面:自訂邏輯。
  • 字串正則:自動包裝為 ^(...)$ 進行 Regex.IsMatch(忽略大小寫、文化特性不變)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved