Chorn Sokun's Weblog

Conquer inner fear, push it to the limit!

Castle Routing Module

with 5 comments

In previous post I was talking about the beauty of MR Controller which I also mention about Routing feature of Castle MonoRail Framework. Today I am going to walk you through basic steps to configure environement, define and register MR Routing.

Step 1: Start with web.config by adding the following line into system.web\httpModules section

<add name="routing"
  type="Castle.MonoRail.Framework.Routing.RoutingModuleEx, Castle.MonoRail.Framework" />

Step 2: Define routing rules, base on Hammett suggestion I am going to create a static class for handling this task

// filename: RoutingRules.cs
using Castle.MonoRail.Framework.Routing;

public static class RoutingRules
    public static void Register(IRoutingRuleContainer rules)
	  rules.Add(new PatternRoute("<controller>/[action]")
	// you can add as many rules as you want

Step 3: Register rules, this have to be done once and the best place for that is in Global.asax using its’ Application_Startup event

public class Global : HttpApplication
    public override void Application_Start(object sender, System.EventArgs e)
        base.Application_Start(sender, e);

And that about it. Oh by the way if you are like me. I am a big fan of UrlHelper class and I’m addicted to this macro:

// generate url /product/list<.extension>
${Url.For({@controller: 'product', @action: 'list'})}

And if you do not want to gernerate url with extension /product/list then you have to take another step by adding the following line to monorail configuration section in the web.config

Step 4: Remove extension from generated url

<monorail defaultUrlExtension="">
    <!-- other configuration removed -->
    <url useExtensions="false"/>
    <!-- other configuration removed -->

Now do you have any specific routing rules wanted to discuss? It’s time to dig in ;)

Ken Egozi also had an interesting post related to this topic.

Written by Chorn Sokun

September 24, 2008 at 11:09 pm

5 Responses

Subscribe to comments with RSS.

  1. Hi,
    How do you make Monorail work without using extensions for actions?

    I tried creating some rewrite rules, with Ionics ( which has mod_rewrite syntax, but I could not make it work.


    October 27, 2008 at 10:55 pm

  2. Dan, are you trying to configure it on IIS? or in development environment?

    For IIS it required IIS 6 or higher and you don’t need additional tool to make it works all you have to do is configure wildcard handler aspnet_isapi.dll

    Chorn Sokun

    October 28, 2008 at 8:14 am

  3. the configuration is done at IIS 5.1/6 level, but i was hoping to avoid wildcard mapping to aspnet_isapi.dll.

    i’d hoped i can do something like this:

    <![CDATA[ /product/(?\d+)/show ]]>


    October 28, 2008 at 2:29 pm

  4. @Sokun, I’m trying to make the routing module works with default action or controller, but it doesn’t. I always face with 404 page not found. Did I forget to do something? I really like routing in ASP.NET MVC feature, but I’m not sure I could do the same in MR. I’m using IIS7 with the build from castle trunk for .NET 3.5.


    November 14, 2008 at 3:51 pm

  5. @Samnang, check this blog post

    Chorn Sokun

    November 14, 2008 at 4:25 pm

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: