创建自定义路由 (C#)
了解如何将自定义路由添加到 ASP.NET MVC 应用程序。 本教程介绍如何修改 Global.asax 文件中的默认路由表。
本教程介绍如何将自定义路由添加到 ASP.NET MVC 应用程序。 了解如何使用自定义路由修改 Global.asax 文件中的默认路由表。
对于许多简单的 ASP.NET MVC 应用程序,默认路由表将正常工作。 但是,你可能会发现你有专门的路由需求。 在这种情况下,可以创建自定义路由。
例如,假设你正在生成一个博客应用程序。 你可能想要处理如下所示的传入请求:
/Archive/12-25-2009
当用户输入此请求时,你想要返回与日期 2009/12/25 相对应的博客条目。 若要处理此类请求,需要创建自定义路由。
清单 1 中的 Global.asax 文件包含名为 Blog 的新自定义路由,该路由处理类似于 /Archive/entry 日期的请求。
清单 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);
}
}
}
添加到路由表的路由顺序非常重要。 我们新的自定义博客路由是在现有默认路由之前添加的。 如果反转了顺序,则默认路由将始终被调用,而不是自定义路由。
自定义博客路由与以 /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 () 的控制器操作。