创建自定义路由 (VB)
了解如何将自定义路由添加到 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 (
Public Class MvcApplication
Inherits System.Web.HttpApplication
Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' MapRoute takes the following parameters, in order:
' (1) Route name
' (2) URL with parameters
' (3) Parameter defaults
routes.MapRoute( _
"Blog", _
"Archive/{entryDate}", _
New With {.controller = "Archive", .action = "Entry"} _
)
routes.MapRoute( _
"Default", _
"{controller}/{action}/{id}", _
New With {.controller = "Home", .action = "Index", .id = ""} _
)
End Sub
Sub Application_Start()
RegisterRoutes(RouteTable.Routes)
End Sub
End Class
添加到路由表的路由顺序非常重要。 我们新的自定义博客路由是在现有默认路由之前添加的。 如果反转了顺序,则默认路由将始终被调用,而不是自定义路由。
自定义博客路由与以 /Archive/ 开头的任何请求匹配。 因此,它匹配以下所有 URL:
/Archive/12-25-2009
/Archive/10-6-2004
/Archive/apple
自定义路由将传入请求映射到名为 Archive 的控制器,并调用 Entry () 操作。 调用 Entry () 方法时,输入日期将作为名为 entryDate 的参数传递。
可以将博客自定义路由与清单 2 中的控制器配合使用。
清单 2 - ArchiveController.vb
Public Class ArchiveController
Inherits System.Web.Mvc.Controller
Function Entry(ByVal entryDate As DateTime)
Return "You requested the entry from " & entryDate.ToString()
End Function
End Class
请注意,清单 2 中的 Entry () 方法接受类型为 DateTime 的参数。 MVC 框架足够智能,可以自动将输入日期从 URL 转换为 DateTime 值。 如果无法将 URL 中的条目日期参数转换为 DateTime,则会引发错误 (请参阅图 1) 。
图 1 - 转换参数出错
图 01:转换参数时出错 (单击以查看全尺寸图像)
总结
本教程的目的是演示如何创建自定义路由。 你已了解如何将自定义路由添加到表示博客条目的 Global.asax 文件中的路由表。 我们讨论了如何将博客文章请求映射到名为 ArchiveController 的控制器和名为 Entry () 的控制器操作。