Getting ASP.NET Routing Up and Running – The Definitive Guide


Back here I gave an example of setting up and ASP.NET webforms site to use ASP.NET routing. A few people have still run into trouble trying to get things working so I thought I'd try and boil things down to the bare essentials. This is what's required to get an ASP.NET webforms application routing requests via ASP.NET routing on ASP.NET 3.5 Sp1 using the WebDev WebServer.


Step 1


Create a new ASP.NET website


Step 2


Add a reference to System.Web.Routing


Step 3


Add Global.asax to your website


Step 4


Import the System.Web.Routing namespace in Global.asax

<%@ Import Namespace="System.Web.Routing" %>

Step 5


Add code to the Application_Start method eg (in VB)

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup

Dim rte = New Route("Routes/{ViewName}", New RouteHandler())

RouteTable.Routes.Add(rte)

End Sub


Step 6


Add your RouteHandler class eg

Public Class RouteHandler
Implements IRouteHandler

Function GetHttpHandler(ByVal requestContext As System.Web.Routing.RequestContext) _
As IHttpHandler Implements IRouteHandler.GetHttpHandler

Dim v As New ViewHandler()
v.ViewName = requestContext.RouteData.GetRequiredString("ViewName")
Return v

End Function

End Class


Step 7


Add the URLRoutingModule to the <httpModules> section in web.config eg

<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule,
System.Web.Routing, Version=3.5.0.0,
Culture=neutral,
PublicKeyToken=31BF3856AD364E35"
/>

Step 8


You're done!


Routing Existing Files


Note that by default, ASP.NET routing gives preference to files that already exist on disk at the specified path - those will be served up without going through the routing mechanism unless you set the property RouteTable.Routes.RouteExistingFiles = True. This forces the routing mechanism to be invoked for existing files as well. To give an example:


Imagine I have a default.aspx file in the root of my website, a route defined with the pattern "{ViewName}" and RouteTable.Routes.RouteExistingFiles is False (the default).


If I make a request for http://mywebsite/default.aspx that will be served up in the "normal" way and the routing mechanism will not be invoked.


If I set RouteTable.Routes.RouteExistingFiles = True, the routing mechanism will be invoked and my RouteHandler will be called. The request will therefore be routed by ASP.NET routing.


If there was no route match for the request (eg imagine my only route pattern was "RouteMe/{ViewName}") then the routing mechanism would be invoked, no route match would be found and the default.aspx file would be served up in the normal way.


Technorati Tags: ,


Comments (3)
  1. Just a quick follow-up to my previous post. To get routing working in a web application project you can

  2. I just made my first, albeit small, contribution to stackoverflow.com . Stack Overflow is a great programming

Comments are closed.

Skip to main content