创建自定义路由 (VB)

Microsoft

了解如何将自定义路由添加到 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 () 的控制器操作。