国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式

來源:懂視網 責編:小采 時間:2020-11-27 22:35:56
文檔

剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式

剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式:上一篇我們剖析了Asp.Net路由系統(tǒng),今天我們再來簡單剖析一下Asp.Net Web API以WebHost方式部署時,Asp.Net Web API的路由系統(tǒng)內部是怎樣實現的。還是以一個簡單實例開頭。 創(chuàng)建一個空的WebApi項目,在Global中注冊路由信息: public clas
推薦度:
導讀剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式:上一篇我們剖析了Asp.Net路由系統(tǒng),今天我們再來簡單剖析一下Asp.Net Web API以WebHost方式部署時,Asp.Net Web API的路由系統(tǒng)內部是怎樣實現的。還是以一個簡單實例開頭。 創(chuàng)建一個空的WebApi項目,在Global中注冊路由信息: public clas

上一篇我們剖析了Asp.Net路由系統(tǒng),今天我們再來簡單剖析一下Asp.Net Web API以WebHost方式部署時,Asp.Net Web API的路由系統(tǒng)內部是怎樣實現的。還是以一個簡單實例開頭。

創(chuàng)建一個空的WebApi項目,在Global中注冊路由信息:

 public class WebApiApplication : System.Web.HttpApplication
 {
 protected void Application_Start()
 {
 //注冊路由
 GlobalConfiguration.Configuration.Routes.MapHttpRoute(
 name: "default",
 routeTemplate: "api/{controller}/{id}", 
 defaults: new { id = RouteParameter.Optional });
 }
 }

創(chuàng)建一個名為Home的Controller:

 public class HomeController : ApiController
 {
 // GET: api/Home
 public IEnumerable<string> Get()
 {
 return new string[] { "value1", "value2" };
 }

 // GET: api/Home/5
 public string Get(int id)
 {
 return "value";
 }
 
 }

啟動運行,在瀏覽器地址欄分別輸入http://localhost:46351/api/home和http://localhost:46351/api/home/5,結果如下:

簡單看了一下Asp.Net Web API的實例,下面我們開始剖析Asp.Net Web API的路由系統(tǒng)。

首先看一下在Asp.Net Web API中路由的注冊方式,如下:

 

在這個路由注冊過程中,隱藏了哪些操作呢?下面我們源碼:

 

通過翻看源碼可以看到,Asp.Net Web API中路由的注冊實際上是通過調用HttpRouteCollection類型的擴展方法MapHttpRoute實現的,在MapHttpRoute方法里面,我們看到創(chuàng)建的路由對象通過調用HttpRouteCollection對象的Add方法保存了。而由于GlobalConfiguration的靜態(tài)屬性通過Configuration是HostedHttpRouteCollection類型以RouteTable.Routes為構造參數創(chuàng)建的,又因為HostedHttpRouteCollection類型是HttpRouteCollection類型的子類,在HostedHttpRouteCollection類型中,子類HostedHttpRouteCollection重寫了父類型的Add方法和CreateRoute方法,如下圖,所以,實際上創(chuàng)建出來的路由對象的類型為HostedHttpRoute,此路由對象放到全局路由表中保存了,從這里我們可以知道,保存到全局路由表中的路由對象的類型為HostedHttpRoute。那么,注冊的路由對象放到全局路由表中保存有什么用呢,后續(xù)部分分析。

 

從上面源碼可以看到,最后創(chuàng)建的路由對象是HostedHttpRoute類型,那么現在有個問題,我們在前面注冊路由的時候,并沒有指定RouteHandler和HttpHandler,它們是從哪里添加到路由對象中的呢?在創(chuàng)建HostedHttpRoute對象的過程中,又有哪些隱藏的秘密呢?我們下面繼續(xù)查看源碼:

 

通過上文的剖析,到目前為止,我們可以知道在Asp.Net Web API以WebHost方式寄宿時,注冊的路由對象為HostedHttpRoute類型的實例,保存在全局路由表RouteTable.Routes中,而用于處理請求的RouteHandler和HttpHandler分別為HttpControllerRouteHandler類型的實例和HttpControllerHandler類型的實例。

 注冊完路由信息后,在Asp.Net Web API中是如何利用注冊的路由信息進行路由的呢?會不會也是跟Asp.Net中一樣通過一個HttpModule來實現的呢,我們啟動程序看一下Global類中的Modules屬性:

 

從上面截圖可以清楚看到,在Asp.Net Web API以WebHost方式寄宿服務時,也是跟ASP.Net一樣,通過UrlRoutingModule來實現路由的。從上一篇針對Asp.Net路由系統(tǒng)的剖析中,我們可以知道,Asp.Net是通過UrlRoutingModule對請求進行攔截后,然后從全局路由表中依次進行匹配以獲取與請求Url匹配的RouteData進行后續(xù)處理的。在Asp.Net Web API中,從上文中我們知道了保存在全局路由表的路由對象是HostedHttpRoute類型的,下面我們繼續(xù)剖析在Asp.Net Web API中最終是怎么獲取到匹配的RouteData的。

在UrlRoutingModule中,RouteData是通過依次調用每個路由對象的GetRouteData方法獲取的。在Asp.Net Web API中,由于路由對象的類型為HostedHttpRoute,下面我們來看看調用GetRouteData方法時發(fā)生了什么:

 

可以看到,在HostedHttpRoute中是通過屬性OriginalRoute的GetRouteData方法獲取RouteData的,由前文的剖析中,我們知道這個OriginalRoute屬性是HttpWebRoute類型:

 

 從上面剖析中可以看到,Asp.Net Web API以WebHost方式部署時,最終還是通過Asp.Net的路由系統(tǒng)完成匹配工作。不過有一定需要注意的是,由于在HttpWebRoute中對父類型的驗證約束的方法進行了重寫,所以對于約束的驗證,Asp.Net Web API還是使用了自己的方式進行驗證約束是否匹配:

最后,通過一系列的工作獲取到了RouteData對象和包含在里面的RouteHandler、HttpHandler后,Asp.Net Web API就可以通過這些獲取到的進行請求的處理和響應了。

 總結:

通過上文的剖析,可以得出:在Asp.Net Web API以WebHost方式部署時,注冊的路由是保存在全局路由表中的;在獲取RouteData時,是通過Asp.Net路由系統(tǒng)的匹配規(guī)則進行路由匹配的,不過卻實現了自己的約束驗證規(guī)則。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式

剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式:上一篇我們剖析了Asp.Net路由系統(tǒng),今天我們再來簡單剖析一下Asp.Net Web API以WebHost方式部署時,Asp.Net Web API的路由系統(tǒng)內部是怎樣實現的。還是以一個簡單實例開頭。 創(chuàng)建一個空的WebApi項目,在Global中注冊路由信息: public clas
推薦度:
標簽: API 路由 剖析
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产欧美综合精品一区二区 | 91精品一区二区三区在线观看 | 精品国产成人综合久久小说 | 亚洲一区日韩 | 一区二区久久 | 成人黄色在线 | 久久久久国产一级毛片高清版 | 欧美一欧美一区二三区性 | 在线国产一区二区三区 | 欧美最新一区二区三区四区 | 激情综合亚洲欧美日韩 | 国产精品va一级二级三级 | 亚洲免费a| 国内视频一区二区三区 | 欧美成人在线视频 | 欧美中出| 国产成人综合久久精品亚洲 | 欧美精品人爱c欧美精品 | 99精品在免费线视频 | 午夜看一级特黄a大片黑 | 欧美日韩无 | 亚欧在线观看 | 免费视频国产 | 国产成人精视频在线观看免费 | 国模冰冰炮交图150 国模吧国模吧一二区 | 四虎免费在线观看视频 | 欧美日韩另类综合 | 久久久久久综合成人精品 | 欧美日韩资源 | a毛片免费| 欧美日韩另类综合 | 欧美伊人久久大香线蕉综合69 | wwww欧美| 亚洲国产成人综合精品2020 | 精品成人一区二区三区免费视频 | 亚洲日韩欧美视频 | 91欧美激情一区二区三区成人 | 一级特黄牲大片免费视频 | 国产午夜在线观看 | 成人精品视频一区二区在线 | 日韩欧美色视频 |