Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

.NET 4.5 MVC RouteCollection.LowercaseUrls breaks when using Area

A new property to RouteCollection was added with .NET Framework 4.5:

http://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.lowercaseurls.aspx

This works great, until you add an Area to your project. All Urls are propercase again.

Any ideas why this happens? It's simple to reproduce:

  1. Create new MVC 4 Internet Application (.NET 4.5)
  2. Start RouteConfig.RegisterRoutes function with: routes.LowercaseUrls = true;
  3. Run the project and you'll see all generated Urls are now lowercase.
  4. Add an Area to the project.
  5. Run the project again and you'll see all Urls are propercase again!

It breaks at the point where context.MapRoute gets executed in AreaRegistration.RegisterArea. When I comment that out, I got lowercase Urls. Uncomment it, and the propercase Urls are back.

It seems to me like Microsoft knows this is buggy and doesn't advertise this new feature, as it's a really great feature but it is only mentioned in the MSDN docs.

like image 691
mwijnands Avatar asked Nov 07 '12 13:11

mwijnands


1 Answers

This indeed appears to be a bug in the interaction between ASP.NET MVC and ASP.NET 4.5's new LowercaseUrls feature in routing.

I have logged a bug for MVC here: http://aspnetwebstack.codeplex.com/workitem/685

Thank you for reporting this!

As Cristi Pufu mentions, it appears that others have written some NuGet packages to handle similar scenarios:

  • http://nuget.org/packages/LowercaseRoutesMVC - adds support for lowercase URLs
  • http://nuget.org/packages/AttributeRouting - adds super fancy support for tons of neat feature, including lowercase URLs (see https://github.com/mccalltd/AttributeRouting/wiki/Generating-Lowercase-Outbound-URLs)

EDIT 4/23/2013 - We have recently accepted a pull request with a fix for this issue for ASP.NET MVC 5.

like image 145
Eilon Avatar answered Sep 27 '22 22:09

Eilon