Несколько RoutePrefixes на контроллер с использованием маршрутизации атрибутов MVC?

Я знаю, что с новой маршрутизацией атрибутов MVC вы можете назначить несколько атрибутов Route одному ActionResult, но я ищу способ сделать то же самое на уровне RoutePrefix. У меня есть контроллер, который при каждом действии должен быть доступен по трем маршрутам:

/Games/{Title}/Characters/{Route} /Books/{Title}/Characters/{Route} /Cinema/{Title}/Characters/{Route}

Я попытался указать три отдельных атрибута RoutePrefix, но получаю сообщение об ошибке Deuplace RoutePrefix attribute. Если я попытаюсь использовать список, разделенный запятыми, я получу Best override method for does not contain a constructor that takes 3 arguments.

Можно ли настроить RoutePrefix так, чтобы он использовал три маршрута, которые я хочу для моего контроллера?


person Matthew Verstraete    schedule 29.06.2014    source источник


Ответы (1)


Проведя кучу тестов, я обнаружил, что могу просто добавить 3 атрибута Route на уровень контроллера, и он работает так, как я хочу.

Изменить: лучший способ сделать это, который я нашел, - это использовать метод сопоставления регулярных выражений

[RoutePrefix("{Type:regex(Games|Cinema|Books)}/{SectionRoute}/Character/")]

person Matthew Verstraete    schedule 29.06.2014
comment
Как бы вы это сделали без регулярного выражения? Могу ли я просто добавить несколько строк атрибутов? [RoutePrefix("prefix1")] [RoutePrefix("prefix2")] - person Zapnologica; 28.10.2015
comment
@Zapnologica Прошло много времени с тех пор, как я это сделал, но если я правильно помню, вы либо делаете это, как в вашем примере, либо разделяете их запятой, например [RoutePrefix("prefix1"), RoutePrefix("prefix2")], попробуйте их оба и посмотрите, что произойдет. - person Matthew Verstraete; 28.10.2015
comment
Не думает, что это возможно. Он выдаст атрибут Duplicate RoutePrefix. - person user1961100; 29.10.2015
comment
И я думаю, что вы должны поставить знак конца $ в конце каждой строки, чтобы запретить Gamesssdlasd, Cinemasasdasd и т. д. [RoutePrefix("{Type:regex(Games$|Cinema$|Books$)}/{SectionRoute}/Character/")] - person Okan Kocyigit; 16.02.2018
comment
github.com/asadmalik3/WebApiMultipleRoutePrefixAttribute Это позволяет использовать несколько routePrefix. - person SatanEnglish; 27.02.2018