I'm having some trouble getting routes to match.
I am using base-32 encoded int's as short links to slideshows in a web app. There are 5 different versions of each slideshow, and I am using an initial letter to distinguish between each version.
The routes always match, except when the first character of the base-32 encoded int is the same as the character designating the slideshow version. This anomaly exists for all 5 prefix letters: n, f, c, x, and h.
What about the first two characters being the same makes these routes not match? I'm at a loss to understand what's going on here (when the routes don't match, they simply fall through to the default).
Route Matches (/na0
):
Route Doesn't Match (/nn0
):
Route Matches (/nfg
):
Route Doesn't Match (/ffg
):
I'm boggled. Here's the routing code, in case it isn't clear in the RouteDebug tables in the screenshots:
routes.MapRoute(
"NonBrandedSlideshow",
"n{id}",
MVC.Slideshow.NonBranded(), null,
new { id = Settings.Base32Regex }
);
routes.MapRoute(
"FullSlideshow",
"f{id}",
MVC.Slideshow.Full(), null,
new { id = Settings.Base32Regex }
);
routes.MapRoute(
"CompactSlideshow",
"c{id}",
MVC.Slideshow.Compact(), null,
new { id = Settings.Base32Regex }
);
routes.MapRoute(
"FlexibleSlideshow",
"x{id}",
MVC.Slideshow.Flexible(), null,
new { id = Settings.Base32Regex }
);
routes.MapRoute(
"Html5Slideshow",
"h{id}",
MVC.Slideshow.NonBrandedHtml5(), null,
new { id = Settings.Base32Regex }
);
I should note here that I am using T4MVC (see section 2.2.5), and these MapRoute
methods are extensions added by T4MVC. The MapRoute
methods I am using are equivalent to the standard methods, and I have tried using the non-T4MVC MapRoute
method with the same result:
routes.MapRoute(
"Html5Slideshow",
"h{id}",
new { controller = "Slideshow", action = "NonBrandedHtml5" },
new { id = Settings.Base32Regex }
);
Here is the Base32Regex, though I have tried it with and without this constraint (the Base32 implementation I am using will assume I and O are 1 and 0, for example).
public static partial class Settings
{
public static string Base32Regex
{
get { return @"[0-9ABCDEFGHJKMNPQRSTVWXYZ]+"; }
}
}