Creating Custom Routes (VB)
In this tutorial, you learn how to
add a custom route to an ASP.NET MVC application. You learn how to modify
the default route table in the Global.asax file with a custom route.
In ASP.NET MVC applications,
the default route table will work just fine. However, you might discover
that you have specialized routing needs. In that case, you can create
a custom route.
Imagine, for example, that you are
building a blog application. You might want to handle incoming requests
that look like this:
/Archive/12-25-2009
When a user enters this request, you
want to return the blog entry that corresponds to the date 12/25/2009.
In order to handle this type of request, you need to create a custom
route.
The Global.asax file in Listing 1 contains
a new custom route, named Blog, which handles requests that look like
/Archive/entry date.
Listing 1
– Global.asax (with custom route)
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
The order of the routes that you add
to the route table is important. Our new custom Blog route is added
before the existing Default route. If you reversed the order, then the
Default route always will get called instead of the custom route.
The custom Blog route matches any request
that starts with /Archive/. So, it matches all of the following URLs:
The custom route maps the incoming
request to a controller named Archive and invokes the Entry() action.
When the Entry() method is called, the entry date is passed as a parameter
named entryDate.
You can use the Blog custom route with
the controller in Listing 2.
Listing 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
Notice that the Entry() method in Listing
2 accepts a parameter of type DateTime. The MVC framework is smart enough
to convert the entry date from the URL into a DateTime value automatically.
If the entry date parameter from the URL cannot be converted to a DateTime,
an error is raised (see Figure 1).
Figure 1
– Error from converting parameter
Summary
The goal of this tutorial was to demonstrate
how you can create a custom route. You learned how to add a custom route
to the route table in the Global.asax file that represents blog entries.
We discussed how to map requests for blog entries to a controller named
ArchiveController and a controller action named Entry().