前言
最近打算抽時(shí)間看一下 ASP.NET Core MVC 的源碼,特此把自己學(xué)習(xí)到的內(nèi)容記錄下來,也算是做個(gè)筆記吧。
路由作為 MVC 的基本部分,所以在學(xué)習(xí) MVC 的其他源碼之前還是先學(xué)習(xí)一下路由系統(tǒng),ASP.NET Core 的路由系統(tǒng)相對于以前的 Mvc 變化很大,它重新整合了 Web Api 和 MVC。
路由源碼地址 :Routing-dev_jb51.rar
路由(Routing)功能介紹
路由是 MVC 的一個(gè)重要組成部分,它主要負(fù)責(zé)將接收到的 Http 請求映射到具體的一個(gè)路由處理程序上,在MVC 中也就是說路由到具體的某個(gè) Controller 的 Action 上。
路由的啟動方式是在ASP.NET Core MVC 應(yīng)用程序啟動的時(shí)候作為一個(gè)中間件來啟動的,詳細(xì)信息會在下一篇的文章中給出。
通俗的來說就是,路由從請求的 URL 地址中提取信息,然后根據(jù)這些信息進(jìn)行匹配,從而映射到具體的處理程序上,因此路由是基于URL構(gòu)建的一個(gè)中間件框架。
路由還有一個(gè)作用是生成響應(yīng)的的URL,也就是說生成一個(gè)鏈接地址可以進(jìn)行重定向或者鏈接。
路由中間件主要包含以下幾個(gè)部分:
Getting Started
ASP.NET Core Routing 主要分為兩個(gè)項(xiàng)目,分別是 Microsoft.AspNetCore.Routing.Abstractions,Microsoft.AspNetCore.Routing。前者是一個(gè)路由提供各功能的抽象,后者是具體實(shí)現(xiàn)。
我們在閱讀源碼的過程中,我建議還是先大致瀏覽一下項(xiàng)目結(jié)構(gòu),然后找出關(guān)鍵類,再由入口程序進(jìn)行閱讀。
Microsoft.AspNetCore.Routing.Abstractions
大致看完整個(gè)結(jié)構(gòu)之后,我可能發(fā)現(xiàn)了幾個(gè)關(guān)鍵的接口,理解了這幾個(gè)接口的作用后能夠幫助我們在后續(xù)的閱讀中事半功倍。
IRouter
在 Microsoft.AspNetCore.Routing.Abstractions 中有一個(gè)關(guān)鍵的接口就是 IRouter:
public interface IRouter{ Task RouteAsync(RouteContext context); VirtualPathData GetVirtualPath(VirtualPathContext context);}這個(gè)接口主要干兩件事情,第一件是根據(jù)路由上下文來進(jìn)行路由處理,第二件是根據(jù)虛擬路徑上下文獲取 VirtualPathData。
IRouteHandler
另外一個(gè)關(guān)鍵接口是 IRouteHandler , 根據(jù)名字可以看出主要是對路由處理程序機(jī)型抽象以及定義的一個(gè)接口。
public interface IRouteHandler{ RequestDelegate GetRequestHandler(HttpContext httpContext, RouteData routeData);}它返回一個(gè) RequestDelegate 的一個(gè)委托,這個(gè)委托可能大家比較熟悉了,封裝了處理Http請求的方法,位于Microsoft.AspNetCore.Http.Abstractions 中,看過我之前博客的同學(xué)應(yīng)該比較了解。
這個(gè)接口中
新聞熱點(diǎn)
疑難解答
圖片精選