RouteDebugger是什嗎?
在Asp.Net MVC程式中,路由(Route)是一個非常核心的概念,可以說是MVC程式的入口,因為每一個Http請求都要經過路由計算,然後匹配到相應的Controller和Action。通常我們的路由都會註冊在Global.asax.cs檔案中的RegisterRoutes方法中,路由會從上往下依次匹配,因此自訂的(優先順序高)的路由需要放在預設(通用)路由的前面。但是,如何確保所有的路由都是正確的,或者是沒有重複的呢?RouteDebugger就是這樣一個分析工具。
安裝
可以使用NuGet很方便的安裝RouteDebugger,在項目上面右鍵-"Manage NuGet Packages"-"Online"輸入"RouteDebugger"然後"Install",或者在"Package Manager Console"中輸入:"Install-Package routedebugger"安裝即可。由於NuGet有時會莫名其妙被牆,我上傳了一個壓縮檔:RouteDebugger 2.1.3
注意:RouteDebugger 2.x版本對應.NET4.0和MVC3,舊版本請參考Phil Haack的ASP.NET Routing Debugger
使用
當你成功安裝後,可以看到項目引用了"RouteDebugger",然後?然後按F5運行程式你就可以看到效果了。是的,你甚至都不需要配置任何一行代碼!這是因為.NET4.0新增的程式集Microsoft.Web.Infrastructure允許動態註冊HttpModule,RouteDebugger將格式化的路由調試資訊追加(append)到每一個request裡。對於.NET3.5和MVC3之前的項目,如果要使用RouteDebugger,還需要在Application_Start中註冊:
?
1
2
3
4
5
protected
void
Application_Start(
object
sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
從瀏覽器的輸出我們可以看到詳細的Route匹配資訊,當前請求可以成功匹配哪些路由。
注意:{*catchall}路由是RoutDebugger自動添加的,這樣即使沒有任何一個路由匹配成功,也會顯示相應的路由資訊,而不是404(不過我本地測試發現非法url還是返回了404,有人在Phil Haack的部落格提出了這個問題但是沒有得到回答)。
禁用RouteDebugger
當使用了RouteDebugger後,你會發現每一個頁面的後面都會附帶路由資訊。如果你需要禁用這個功能,開啟Web.config:
將RouteDebugger:Enabled後面的value="false"即可關閉RouteDebugger模式。