亚洲成a人片在线观看www_二区免费视频_免费在线观看毛片_国产精品www爽爽爽视频_国产一区av在线_区美毛片

IT之道-艾銻知道

您當(dāng)前位置: 主頁(yè) > IT服務(wù) > 網(wǎng)絡(luò)服務(wù) >

解析ASP.NET 路由


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

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

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

  RouteBase

  一個(gè)抽象基類。

  public abstract class RouteBase

  {

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

  public bool RouteExistingFiles { get; set; }

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

  public abstract RouteData GetRouteData(HttpContextBase httpContext);

  //路由解析生成一個(gè)完整的路徑

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

  }

  RouteData

  封裝了有關(guān)路由的信息。

  RouteData通過(guò)其RouteHandler屬性返回一個(gè)RouteHandler對(duì)象。

  RouteHandler實(shí)現(xiàn)IRouteHandler中的GetHttpHandler(RequestContext requestContext),返回一個(gè)具的HttpHandler對(duì)象接管http請(qǐng)求。

  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

  表示有關(guān)路由和虛擬路徑的信息。

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

  此類為虛擬路徑和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

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

  路由解析由路由表中具體的某個(gè)Route對(duì)象來(lái)完成。

  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; }

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

  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

  存儲(chǔ)應(yīng)用程序的 URL 路由。

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

  public class RouteTable

  {

  public static RouteCollection Routes { get; }

  }

  RouteCollection

  一組Route的集合,用來(lái)操作Route。

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

  常用的兩個(gè)方法。MapPageRoute:注冊(cè)路由。Ignore:忽略對(duì)應(yīng)的URL格式。

  總結(jié)下類之間的關(guān)系:

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

  路由注冊(cè)

  MVC4中默認(rèn)的路由注冊(cè)

  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 }

  );

  }

  書(shū)中帶約束的注冊(cè)方式

  public static void RegisterRoutes(RouteCollection routes)

  {

  //默認(rèn)值

  var defaults = new RouteValueDictionary{

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

  //正則約束

  var constaints = new RouteValueDictionary {

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

  //說(shuō)明

  var dataTokens = new RouteValueDictionary{

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

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

  ,false,defaults,constaints,dataTokens);

  }

  正則約束是其中一個(gè)比較簡(jiǎn)單的方法,我們還可以通過(guò)自定義約束來(lái)實(shí)現(xiàn)。實(shí)現(xiàn)IRouteConstraint的Match方法。(it外包服務(wù)

  假設(shè)現(xiàn)在我們要通過(guò)IRouteConstraint來(lái)限制IE瀏覽器的訪問(wèn)。

  public class IERouteConstraint : IRouteConstraint

  {

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

  {

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

  }

  }

  //在原來(lái)的約束基礎(chǔ)上修改

  var constaints = new RouteValueDictionary {

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

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

  從HTTP請(qǐng)求到路由解析

  URLRoutingModule派生自IHttpModule。通過(guò)它注冊(cè)HttpApplication的PostResolveRequestCache事件。

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

  如果路由匹配成功,會(huì)返回一個(gè)具體的RouteData對(duì)象。

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

  解析完成,針對(duì)當(dāng)前的HTTP請(qǐng)求就由該Handler來(lái)接手。

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

  更多的IT外包信息盡在艾銻無(wú)限http://www.zhengyunzhengyun.cn


相關(guān)文章

IT外包服務(wù)
二維碼 關(guān)閉
主站蜘蛛池模板: 亚洲中文字幕久爱亚洲伊人 | 捆绑白丝震动捧强制电击 | 国产一区二区三区精品在线观看 | 国产xxxxav| 亚洲黄色片免费 | 国产精品国产精品国产专区不蜜 | 91久久夜色精品国产网站 | 中文字幕无码大香线蕉 | 精品区2区3区4区产品乱码9 | 91久久精品凹凸一区二区 | 国产无套激情在线视频 | 成人免费看片a | 国产高清一区二区 | 精品国产乱码一区二区三 | 日韩精品人妻中文字幕在线有码 | 看全色黄大色黄女片爽名优 | 国产黄色a | 国产在线精品福利91香蕉 | 午夜性色福利免费视频在线播放 | 国产成人在线网址 | 国产偷国产偷亚洲清高网站 | 97伦理影院| 九九99久久精品国产 | 不卡一区二区三区四区 | 亚洲视频 一区 | 国产美女无遮挡免费 | 91丨日韩丨精品 | 日韩精品一区二区亚洲A∨观看 | 久久久久国产一区 | 欧美成人ccc大片 | 欧美另类视频在线观看 | 亚洲精品久久激情国产片 | 99久久免费只有精品国产高潮 | 国产精品网站一区二区三区 | 久久精品一区中文字幕 | 国产一区二区三区四区五区传媒 | "久久国产精品 国产精品" | 国产一区二区三区免费播放 | 亚洲精品7777xxxx青睐 | 国产精品成人久久网 | 亚洲网站在线免费观看 |