У меня проблемы с поиском маршрутов.
Я использую int в кодировке base-32 в качестве коротких ссылок на слайд-шоу в веб-приложении. Существует 5 разных версий каждого слайд-шоу, и я использую начальную букву, чтобы различать каждую версию.
Маршруты всегда совпадают, за исключением случаев, когда первый символ int в кодировке base-32 совпадает с символом, обозначающим версию слайд-шоу. Эта аномалия существует для всех 5 букв префикса: n, f, c, x и h.
Что насчет того, что первые два символа совпадают, что приводит к несовпадению этих маршрутов? Я не понимаю, что здесь происходит (когда маршруты не совпадают, они просто переходят к значениям по умолчанию).
Маршрутные совпадения ( / na0
):
Маршрут не соответствует ( / nn0
):
Маршрутные совпадения ( / nfg
):
Маршрут не соответствует ( / ffg
):
Я сбита с толку. Вот код маршрутизации, на случай, если он неясен в таблицах RouteDebug на снимках экрана:
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 }
);
Я должен отметить здесь, что я использую T4MVC (см. Раздел 2.2.5), а эти Методы MapRoute
- это расширения, добавленные T4MVC. Методы MapRoute
, которые я использую, эквивалентны стандартным методам, и я попытался использовать не-T4MVC MapRoute
метод с тем же результатом:
routes.MapRoute(
"Html5Slideshow",
"h{id}",
new { controller = "Slideshow", action = "NonBrandedHtml5" },
new { id = Settings.Base32Regex }
);
Вот Base32Regex, хотя Я пробовал это с этим ограничением и без него (например, используемая мной реализация Base32 предполагает, что I и O равны 1 и 0).
public static partial class Settings
{
public static string Base32Regex
{
get { return @"[0-9ABCDEFGHJKMNPQRSTVWXYZ]+"; }
}
}