路由基礎知識

當你通過瀏覽器請求 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/IndexyourSite 時獲得相同結果的原因

你可能已經注意到我們有一個名為 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\ImportantyourSiteName\Important\888 時,它將被髮送到 HomeController 的 Index 操作。

路線定義登記順序

路線登記的順序很重要。你應該始終在通用預設路由之前註冊特定的路由模式。