建立自訂路由 (C#)
由 Microsoft 提供
了解如何將自訂路由新增至 ASP.NET MVC 應用程式。 在此教學課程中,您將了解如何修改 Global.asax 檔案中的預設路由表。
在此教學課程中,您會了解如何將自訂路由新增至 ASP.NET MVC 應用程式。 您會了解如何使用自訂路由來修改 Global.asax 檔案中的預設路由表。
對於許多簡單的 ASP.NET MVC 應用程式,預設路由表可以正常運作。 不過,您可能會發現您有特製化路由需求。 在此情況下,您可以建立自訂路由。
例如,假設您要建置部落格應用程式。 您可能要處理如下所示的傳入要求:
/Archive/12-25-2009
當使用者輸入此要求時,您想要傳回對應至日期 12/25/2009 的部落格項目。 若要處理這種類型的要求,您必須建立自訂路由。
清單 1 中的 Global.asax 檔案包含名為 Blog 的新自訂路由,其會處理類似 /Archive/項目日期的要求。
清單 1 - Global.asax (含自訂路由)
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Blog", // Route name
"Archive/{entryDate}", // URL with parameters
new { controller = "Archive", action = "Entry" } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
您新增至路由表的路由順序很重要。 會在現有的預設路由之前新增新的自訂部落格路由。 如果您反轉順序,則預設路由一律會呼叫,而不是自訂路由。
自訂 Blog 路由會比對以 /Archive/ 開頭的任何要求。 因此,其會比對下列所有 URL:
/Archive/12-25-2009
/Archive/10-6-2004
/Archive/apple
自訂路由會將傳入要求對應至名為 Archive 的控制器,並叫用 Entry() 動作。 呼叫 Entry() 方法時,項目日期會當做名為 entryDate 的參數傳遞。
您可以在清單 2 中搭配控制器使用部落格自訂路由。
清單 2 - ArchiveController.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class ArchiveController : Controller
{
public string Entry(DateTime entryDate)
{
return "You requested the entry from " + entryDate.ToString();
}
}
}
請注意,清單 2 中的 Entry() 方法接受 DateTime 類型的參數。 MVC 架構具有足夠智慧,可將 URL 的項目日期自動轉換成 DateTime 值。 如果 URL 的項目日期參數無法轉換成 DateTime,就會引發錯誤 (參見圖 1)。
圖 1 - 轉換參數時發生錯誤
圖 01:轉換參數時發生錯誤 (按一下以檢視全尺寸影像)
摘要
此教學課程的目標是要示範如何建立自訂路由。 您已了解如何將自訂路由新增至代表部落格項目的 Global.asax 檔案中的路由表。 我們已討論如何將部落格項目的要求對應至名為 ArchiveController 的控制器,以及名為 Entry() 的控制器動作。