日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core 3.x - Endpoint Routing 路由体系的内部机制

發布時間:2023/12/4 asp.net 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core 3.x - Endpoint Routing 路由体系的内部机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Endpoint是什么?

Endpoint簡單的可以理解為這樣的一些類,它們包含一個請求的委托(Request Delegate)和其它的一些元數據,使用這些東西,Endpoint類可以生成一個響應。

而在MVC的上下文中,這個請求委托就是一個包裝類,它包裝了一個方法,這個方法可以實例化一個Controller并執行選中的Action方法。

Endpoint還包含元數據,這些元數據用來決定他們的請求委托是否應該用于當前的請求,還是另有其它用途。

說起來可能有點迷糊,下一篇文章我們看看源碼。

?

Startup.cs

之前我們見過,ASP.NET Core里面的Startup.cs里面有兩個方法,分別是ConfigureServices()和Configure(),它們的職責就是注冊應用的一些服務和構建中間件請求管道。

而Startup.cs同時也是路由以及Endpoint進行注冊的地方,當然是作為其它步驟的一部分。

看圖:

在ASP.NET Core應用程序啟動的時候,一個叫做ControllerActionEndpointDataSource的類作為應用程序級別的服務被創建了。

這個類里面有一個叫做CreateEndpoints()的方法,它會獲取所有Controller的Action方法。

然后針對每個Action方法,它會創建一個Endpoint實例。這些Endpoint的實例就是包裝了Controller和Action方法執行的請求委托(Request Delegate)。

同時ControllerActionEndpointDataSource里面包存儲著在應用程序里注冊的路由模板。

而針對每個Endpoint,它要么與某個按約定的路由模板相關聯,要么與某個Controller Action上的Attribute路由信息相關聯。而這些路由在稍后就會被用來將Endpoint與進來的請求進行匹配。

?

從Endpoint的角度查看請求-響應流程圖

App啟動那部分就不說了。

第一個HTTP請求進來的時候,Endpoint Routing中間件就會把請求映射到一個Endpoint上。它會使用App啟動時創建好的EndpointDataSource,用它來遍歷查找所有可用的Endpoint,并檢查和它關聯的路由以及元數據,以便找到最匹配的Endpoint。

一旦某個Endpoint實例被選中,它就會被附加在請求的對象上,這樣它就可以被后續的中間件所使用了。

最后在管道的盡頭,當 Endpoint中間件運行的時候,它就會執行Endpoint所關聯的請求委托。這個請求委托就會觸發和實例化選中的Controller和Action方法,并產生響應。最后響應再從中間件管道原路返回。

總結

以上是生活随笔為你收集整理的ASP.NET Core 3.x - Endpoint Routing 路由体系的内部机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。