Сопоставьте все маршруты, начинающиеся с определенной части URL/ключевого слова

Я создаю тестовый центр для различных модульных тестов в своей личной библиотеке, и я хотел иметь простой для доступа маршрут для тестового API. Таким образом, у меня есть две записи в моей конфигурации маршрута: по умолчанию и мой пользовательский маршрут...

routes.MapRoute(
            name:="Default",
            url:="{controller} / {Action} / {id}",
            defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
        )

        routes.MapHttpRoute(
                name:="UnitTests",
                routeTemplate:="test/{category}/{testname}",
                defaults:=New With {.controller = "TestApis", .action = "testme",
                .category = "TestCategoryOne", .testname = UrlParameter.Optional}
            )

Идея заключалась в том, что всякий раз, когда я хочу позвонить на мой тестовый API-контроллер, я просто добавлю URL-адрес с помощью "test/", и он будет знать, что перенаправляет его на мой "TestApisController"., но, похоже, сломал мой маршрут по умолчанию.

Вопрос

Есть ли способ, с помощью которого я могу сопоставить все маршруты, начинающиеся с "test/", с определенным контроллером, в то же время не нарушая мой маршрут по умолчанию?

ИЗМЕНИТЬ

Итак, через некоторое время я понял, что причина, по которой этот метод не работает, не имеет никакого отношения к маршруту. У меня был другой маршрут API по умолчанию, определенный в файле "WebApiConfig", который вызывал некоторые проблемы. Прошу прощения, я все еще перехожу из Webforms в MVC.

Ответы

Ответ 1

Поскольку контроллер, к которому вы пытаетесь перейти, является контроллером Web Api, вы захотите разместить свой собственный маршрут в файле WebApiConfig.vb. Маршрут должен пройти выше маршрута по умолчанию в этом файле, потому что он более конкретный, чем маршрут по умолчанию, как отметил @Stephen Muecke. Ваш исходный код немного изменится, вместо routes.MapHttpRoute у вас будет config.Routes.MapHttpRoute, например:

config.Routes.MapHttpRoute( _
    name:="UnitTests", _
    routeTemplate:="test/{category}/{testname}", _
    defaults:=New With {.controller = "TestApis", .action = "testme", .category = "TestCategoryOne", .testname = UrlParameter.Optional}
)

Я сделал то же самое, когда в некоторых ситуациях я хотел направить определенные контроллеры, а также включил пользовательские обработчики проверки подлинности на маршруте, то, что вы пытаетесь сделать, должно работать.