ASP.Net MVC Framework 2 - Define Routes in Web.config

Something I like with ASP.Net MVC Framework Preview 2 is the RouteValueDictionary used by the Route class’s Defaults, Constraints and DataTokens property, before they use an anonymous type. Because the properties are now a specific type it’s much easier to define the routes in web.config. Before it was quite easy but some reflection was needed. I have now created a ConfigSection and a helper method to easily register routes which can be defined in the web.config for the Preview 2 version of the ASP.Net MVC Framework. I decided to use the following XML structure to define routes in web.config:

<routeTable>
  <routes>
  
<
add
name="Microsoft"
url="{controller}/{action}/{id}"
routeHandlerType="MyMvcRouteHandler">
<
defaults action="Index" id=""/> <constraints id="..."/> <dataTokens/>
</
add>
<
add name="Default" url="Default.aspx"> <defaults controller="Home" action="Index" id=""/> </add>
</
routes> </routeTable>

In my solution I also decided to make sure the “name” attribute of a route <add> is required and used as a key. The two other attributes of the route <add> are “url” and “routeHandlerType”, used to specify the Url and the type of a IRouteHandler to use (by default if it's empty the MvcRouteHandler will be used). I decided to use three child elements to the <add> element, <defaults>, <constraints> and <dataTokens>. Each attribute added to those elements will be added to the property of the Route class with the same name as the element and as a key, value dictionary of type RouteValueDictionary. To make it easy to register and read the routeTable out from the web.config, I created a helper class “RouteTableManager”. By calling its static method “RegisterRoute” from Application_Start in global.asax, the routes were registered.

RouteTableManager.RegisterRoutes(RouteTable.Routes);

Or

RouteTableManager.RegisterRoutes();

The last method will use the RouteTable class internally.

By creating a custom MvcRouteModule and override the Init method, the routes can be automatically registered without using global.asax.

public class MyUrlRouteingModule : UrlRoutingModule
{
    protected override void Init(HttpApplication application)
    {
        RouteTableManager.RegisterRoutes();
        base.Init(application);
    }
}

You can download the whole source code from here..

Note: The code will only read the routes from the Configuration file, you can’t use it to modify or add new routes. The idea is only to define the routes in a config file instead of adding them manually in the global.asax’s Application_Start event. I also put the source code into the Model directory of the ASP.Net MVC Project, it should be separated into an own assembly, but I was lazy ;)

Published Tuesday, March 11, 2008 5:06 PM by Fredrik N
Filed under: ,

Comments

# re: ASP.Net MVC Framework 2 - Define Routes in Web.config

Tuesday, March 11, 2008 3:55 PM by Haacked

Cool! Now your next step is to figure out what to do if you had a custom route that inherited RouteBase directly? ;)

# re: ASP.Net MVC Framework 2 - Define Routes in Web.config

Tuesday, March 11, 2008 4:37 PM by Fredrik N

Phil: If someone decide to create a custom route, they need to write the code to read their info from the configuration file.. simple solution, isn't it ;)

# Interesting Finds: March 12, 2008

Wednesday, March 12, 2008 10:04 AM by Jason Haley

# March 18 ASP.NET MVC links

Tuesday, March 18, 2008 4:36 PM by Maarten Balliauw

March 18 ASP.NET MVC links

# re: ASP.Net MVC Framework 2 - Define Routes in Web.config

Saturday, March 29, 2008 3:51 PM by David

at a glance this looks like Jonathan Holland's RouteBuilder project, now available on CodePlex: codeeleven.blogspot.com/.../aspnet-mvc-routebuilder-httpmodule.html

# submit new site

Monday, July 21, 2008 8:47 PM by submit new site

This is really simple to do, and will avoid your web content from being stolen as people will not be able to browse the contents of your folder by typing it into the browser. If you type in www. yoursite. com/ wp- content/ plugins and directory browsing

Leave a Comment

(required) 
(required) 
(optional)
(required)