国产三区四区_亚洲精品国产精品色欲AV_青青操av在线_黄的网站在线观看_中文字幕无码无遮挡在线看_日韩精品中文字幕吗一区二区

IT之道-艾銻知道

您當前位置: 主頁 > IT服務 > 網(wǎng)絡服務 >

解析ASP.NET 路由


2015-10-03 19:42 作者:admin 瀏覽量:

  傳統(tǒng)的Web Forms應用,URL指向的是具體的物理文件,而ASP.NET MVC應用一般指向的是某個Controller中的某個Action方法。URL與目標Controller/Action之間的映射關系是通過“路由”來實現(xiàn)的。(it外包

  路由系統(tǒng)中的幾個核心類的描述:

  RouteBase

  一個抽象基類。

  public abstract class RouteBase

  {

  //.NET Framwork4.5以下無該屬性(是否對物理文件采取路由)

  public bool RouteExistingFiles { get; set; }

  //獲取路由數(shù)據(jù)

  public abstract RouteData GetRouteData(HttpContextBase httpContext);

  //路由解析生成一個完整的路徑

  public abstract VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values);

  }

  RouteData

  封裝了有關路由的信息。

  RouteData通過其RouteHandler屬性返回一個RouteHandler對象。

  RouteHandler實現(xiàn)IRouteHandler中的GetHttpHandler(RequestContext requestContext),返回一個具的HttpHandler對象接管http請求。

  public class RouteData

  {

  public RouteData();

  public RouteData(RouteBase route, IRouteHandler routeHandler);

  public string GetRequiredString(string valueName);

  public RouteBase Route { get; set; }

  public IRouteHandler RouteHandler { get; set; }

  public RouteValueDictionary DataTokens { get; }

  public RouteValueDictionary Values { get; }

  }

  VirtualPathData

  表示有關路由和虛擬路徑的信息。

  執(zhí)行RouteBase的GetVirtualPath()會進行路由匹配,將路由變量去替換路由模板中的占位符并生成虛擬路徑。(網(wǎng)絡管理外包

  此類為虛擬路徑和Route的封裝。

  public class VirtualPathData

  {

  public VirtualPathData(RouteBase route, string virtualPath);

  public RouteValueDictionary DataTokens { get; }

  public RouteBase Route { get; set; }

  public string VirtualPath { get; set; }

  }

  Route

  提供用于定義路由及獲取路由相關信息的屬性和方法。

  路由解析由路由表中具體的某個Route對象來完成。

  public class Route : RouteBase

  {

  public Route(string url, IRouteHandler routeHandler);

  public Route(string url, RouteValueDictionary defaults, IRouteHandler routeHandler);

  public Route(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler);

  public Route(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler);

  //約束(可用正則)

  public RouteValueDictionary Constraints { get; set; }

  //存儲額外的變量,不參與路由解析

  public RouteValueDictionary DataTokens { get; set; }

  public RouteValueDictionary Defaults { get; set; }

  public IRouteHandler RouteHandler { get; set; }

  public string Url { get; set; }

  public override RouteData GetRouteData(HttpContextBase httpContext);

  public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values);

  }

  RouteTable

  存儲應用程序的 URL 路由。

  靜態(tài)只讀屬性Routes訪問全局路由表。

  public class RouteTable

  {

  public static RouteCollection Routes { get; }

  }

  RouteCollection

  一組Route的集合,用來操作Route。

  調(diào)用RouteCollection的GetRouteData和GetVirtualPath時會遍歷集合中的所有Route。

  常用的兩個方法。MapPageRoute:注冊路由。Ignore:忽略對應的URL格式。

  總結下類之間的關系:

  Route對象代表一條實際的路由規(guī)則。調(diào)用Route對象的兩個路由匹配方法時進行路由解析,返回的RouteData或VirtualPathData是對Route的封裝。RouteTable存儲了Web應用的全局路由信息,即多個Route對象。

  路由注冊

  MVC4中默認的路由注冊

  public static void RegisterRoutes(RouteCollection routes)

  {

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(

  name: "Default",

  url: "{controller}/{action}/{id}",

  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

  );

  }

  書中帶約束的注冊方式

  public static void RegisterRoutes(RouteCollection routes)

  {

  //默認值

  var defaults = new RouteValueDictionary{

  {"areacode","010"},{"days",2}};

  //正則約束

  var constaints = new RouteValueDictionary {

  {"areacode",@"0\d{2,3}"},{"days",@"[1-3]{1}"}};

  //說明

  var dataTokens = new RouteValueDictionary{

  {"defaultCitr\y","BeiJing"},{"defaultDays",2}};

  routes.MapPageRoute("default","{areacode}/{}days","~/weather.aspx"

  ,false,defaults,constaints,dataTokens);

  }

  正則約束是其中一個比較簡單的方法,我們還可以通過自定義約束來實現(xiàn)。實現(xiàn)IRouteConstraint的Match方法。(it外包服務

  假設現(xiàn)在我們要通過IRouteConstraint來限制IE瀏覽器的訪問。

  public class IERouteConstraint : IRouteConstraint

  {

  public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)

  {

  return !(httpContext.Request.UserAgent.Contains("MSIE"));

  }

  }

  //在原來的約束基礎上修改

  var constaints = new RouteValueDictionary {

  {"areacode",@"0\d{2,3}"},{"days",@"[1-3]{1}"},new IERouteConstraint()};

  注:針對自定義路由約束的詳細內(nèi)容,請移步:http://www.cnblogs.com/xfrog/archive/2010/12/19/1910428.html。此例也選自該博文。

  從HTTP請求到路由解析

  URLRoutingModule派生自IHttpModule。通過它注冊HttpApplication的PostResolveRequestCache事件。

  當一個HttpApplication對象觸發(fā)該事件后,URLRoutingModule通過RouteTable的靜態(tài)只讀屬性Routea得到全局的路由表的RouteCollection對象,然后根據(jù)當前的上下文創(chuàng)建一個HttpContextWrapper對象(派生自HttpContextBase),并將其作為參數(shù)調(diào)用RouteCollection對象的GetRouteData方法。

  如果路由匹配成功,會返回一個具體的RouteData對象。

  URLRoutingModule會將HttpContextWrapper傳入RouteData對象中的RouteHandler。調(diào)用它的GetHttpHandler方法,得到一個具體的HttpHandler。URLRoutingModule最后調(diào)用HttpContextWrapper對象的RemapHandler方法對得到的HttpHandler進行映射。

  解析完成,針對當前的HTTP請求就由該Handler來接手。

  艾銻無限是中國領先IT外包服務商,專業(yè)為企業(yè)提供IT運維外包、電腦維護網(wǎng)絡維護、網(wǎng)絡布線、辦公設備維護、服務器維護、數(shù)據(jù)備份恢復、門禁監(jiān)控、網(wǎng)站建設等多項IT服務外包,服務熱線:400-650-7820 聯(lián)系電話:010-62684652 咨詢QQ1548853602 地址:北京市海淀區(qū)北京科技會展2號樓16D,用心服務每一天,為企業(yè)的發(fā)展提升更高的效率,創(chuàng)造更大的價值。

  更多的IT外包信息盡在艾銻無限http://www.qiaojiaju.cn


相關文章

IT外包服務
二維碼 關閉
主站蜘蛛池模板: 99久热这里只有精品视频免费观看 | 伊人久久精品无码二区麻豆 | 男同gay18禁视频无码视频 | 亚洲影视综合网 | 亚洲精品手机在线 | 高黄暴H日本在线观看 | 国语一区| 一区二区在线免费观看视频 | 中文字幕av一区二区三区免费看 | 你懂得在线观看 | 久久影院中文字幕 | 久草综合在线 | 久久久精品综合 | 免费国产黄网站在线观看动图 | 99久久精品一区二区毛片吞精 | 特级做AA爰片毛片免费看 | 野花视频最新免费完整在线观看 | 国精产品一区一区三区mba视频 | 三年成全免费观看国语高清 | 日本艳妓BBW高潮一19 | 伊人色综合九久久天天蜜桃 | 国产成人福利片 | 日韩成人无码中文字幕 | 人人妻人人爽人人澡AV | 免费性av | 亚洲国产成人久久综合碰 | 巨大黑人极品video | 国模少妇一区二区三区 | 欧美a级片免费观看 | 欧美韩国一区二区 | 国产精品揄拍一区二区 | 亚洲人成在线免费观看 | 日本福利小视频 | 亚洲欧美不卡视频在线播放 | 成人涩涩涩视频在线观看 | 国产色综合色产在线视频 | 午夜毛片在线 | 麻豆MD0077饥渴少妇 | 久久久久久久久国产 | 亚洲国产成人在线观看 | 国内外成人免费视频 |