路由基礎知識
當你通過瀏覽器請求 url yourSite/Home/Index
時,路由模組會將請求定向到 HomeController
類的 Index
操作方法。如何將請求傳送到此特定類的特定方法?有路由表。
每個應用程式都有一個路由表,用於儲存路由模式以及有關將請求定向到何處的資訊。因此,在建立 mvc 應用程式時,已經在路由表中註冊了預設路由。你可以在 RouteConfig.cs
課上看到。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
你可以看到該條目具有名稱和模板。模板是請求進入時要檢查的路徑模式。預設模板將 Home
作為控制器 URL 段的值,Index
作為操作段的值。這意味著,如果你未在請求中明確傳遞控制器名稱和操作,它將使用這些預設值。這是你訪問 yourSite/Home/Index
和 yourSite
時獲得相同結果的原因
你可能已經注意到我們有一個名為 id 的引數作為路由模式的最後一段。但是在預設值中,我們指定它是可選的。這就是我們不必在我們嘗試的 url 中指定 id 值的原因。
現在,返回 HomeController 中的 Index 操作方法併為其新增引數
public ActionResult Index(int id)
{
return View();
}
現在在這個方法中放置一個 visual studio 斷點 。執行你的專案並在瀏覽器中訪問 yourSite/Home/Index/999
。斷點將被擊中,你應該能夠看到 id
引數中現在可以使用值 999。
建立第二個 Route 模式
假設我們想要設定它,以便為不同的路由模式呼叫相同的操作方法。我們可以通過向路由表新增新的路由定義來實現。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// New custom route definition added
routes.MapRoute("MySpecificRoute",
"Important/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
//Default catch all normal route definition
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
我新增的新定義有一個模式 Important/{id}
,其中 id 也是可選的。這意味著當你請求 yourSiteName\Important
或 yourSiteName\Important\888
時,它將被髮送到 HomeController 的 Index 操作。
路線定義登記順序
路線登記的順序很重要。你應該始終在通用預設路由之前註冊特定的路由模式。