Сопоставьте все маршруты, начинающиеся с определенной части 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}
)
Я сделал то же самое, когда в некоторых ситуациях я хотел направить определенные контроллеры, а также включил пользовательские обработчики проверки подлинности на маршруте, то, что вы пытаетесь сделать, должно работать.