MVC原始碼分析 路由匹配

2022-02-13 11:22:44 字數 2681 閱讀 8620

這裡呼叫了自己(urlroutingmodule)的 postresolverequestcache 方法. 

//在註冊路由的時候, ignore方式註冊的, 會返回stoproutinghandler

}按照順序, 看上面我標紅的接個方法.

1. getroutedata()方法

;}接著看, 這裡呼叫了 route 類的 getroutedata() 方法

}這裡就會根據之前註冊路由的限制條件去匹配路由了. 將最後匹配到的那個路由返回.

2. gethttphandler()方法

這裡會呼叫 mvcroutehandler 的 gethttphandler 方法, 前面篇章提過的.

返回乙個 mvchandler .

3. remaphandler()方法

這裡會呼叫 httpcontext 的remaphandler 方法.

}這裡主要就是看最後一句了, 將 mvchandler存入到 httpcontext._remaphandler 中

到這裡, 其實就能看到 路由匹配的過程以及獲取到 mvc處理程式(這個是入口). 

二、路由匹配

在分析路由的時候, 可以借助乙個外掛程式 : routedebugger, 獲取方式為, 在vs程式包控制台中, 執行以下命令

pm> install-package routedebugger
新增完之後, 程式會自動在web.config中新增如下配置:

"

routedebugger:enabled

" value="

true

" />

我們只需要直接執行程式就好了. 先看一張效果圖:

在圖上, 能清晰的看到, 匹配過程中, 與其中的哪乙個路由能匹配的上. 哪一些不能匹配上.

兩個小問題:

如果有兩個匹配規則相同, 但是路由名不同的, 會匹配上哪乙個呢?

哪乙個在前面註冊的, 就回匹配到哪乙個, 後面的不會繼續匹配.

那會不會有匹配規則不同, 但是路由名相同的呢?

一般在使用key的時候, 都是要保證key的唯一性, 路由同樣如此, 路由名不能重複, 必須唯一, 否則會報錯.

有興趣的朋友, 可以去了解下

目錄已同步

MVC原始碼分析 View續之Razor

過完年,大家都忙碌起來了,我也不例外.不過並不是忙碌於去面試找工作,而是忙碌於現在手上的工作.閒話不多說了,進入今天的主題.一 index頁面在 很奇怪,在目錄bin下面的dll檔案中,都沒有看見過檢視的具體內容,那麼他們都去 了呢?首先在index頁面中,加入一句話 this.gettype as...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...