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 路由体系的内部机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业数字化转型解决方案
- 下一篇: .Net微服务实战之技术选型篇