封裝 ParsedRoute (已解析的路由規則),提供五大屬性:
Url:設定時即解析生成 ParsedRoute。Defaults、Constraints、DataTokens:RouteValueDictionary 型別。RouteHandler:IRouteHandler 實作。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...
}
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 支援兩種約束型別:
^(...)$ 進行 Regex.IsMatch(忽略大小寫、文化特性不變)。