I submitted a patch to the MvcContrib project last week containing my fluent interface for route definitions (the one I blogged about last week). It was applied yesterday (revision 541). When I prepared the patch I did some minor changes, for example renamed the route from SagaRoute to MvcRoute (Saga is related to the name of the app I am building).

Some examples:

MvcRoute
  .MappUrl("{controller}/{action}/{id}")
  .ToDefaultAction<HomeController>(x => x.Index(), new {id="0"})
  .AddWithName("Default", routes);

MvcRoute
  .MappUrl("questions/tagged/{tagName}")
  .ToDefaultAction<QuestionsController>(x => x.ViewByTag(""))
  .AddWithName("QuestionsByTag", routes);
  
MvcRoute
  .MappUrl("questions/{id}/{urlName}")
  .WithConstraints(new { id="^[0-9]+$" })
  .ToDefaultAction<QuestionsController>(x => x.ViewQuestion(0))
  .AddWithName("QuestionsById", routes);
  
MvcRoute
  .MappUrl("user/{userName}")  
  .ToDefaultAction<UserController>(x => x.ViewUser(""))
  .AddWithName("UserByName", routes);
    

I added a WithConstraints method. If you do not like the lambda approach but still like the fluent API you can use the WithDefaults method that takes in an anonymous type (like the default MapRoute method do).