Почему этот маршрут не соответствует

У меня проблемы с поиском маршрутов.

Я использую int в кодировке base-32 в качестве коротких ссылок на слайд-шоу в веб-приложении. Существует 5 разных версий каждого слайд-шоу, и я использую начальную букву, чтобы различать каждую версию.

Маршруты всегда совпадают, за исключением случаев, когда первый символ int в кодировке base-32 совпадает с символом, обозначающим версию слайд-шоу. Эта аномалия существует для всех 5 букв префикса: n, f, c, x и h.

Что насчет того, что первые два символа совпадают, что приводит к несовпадению этих маршрутов? Я не понимаю, что здесь происходит (когда маршруты не совпадают, они просто переходят к значениям по умолчанию).

Маршрутные совпадения ( / na0 ): route for na0

Маршрут не соответствует ( / nn0 ): route for nn0

Маршрутные совпадения ( / nfg ): route for nfg

Маршрут не соответствует ( / ffg ): route for 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]+"; }
    }
}

5
задан Max Toro 12 January 2012 в 17:57
поделиться