Моя первоначальная проблема в том, что я смотрю, как лучше всего делать управление версиями в Restful API .Об этом мало кто говорит, у меня нет хорошего ответа, или я не могу найти точное решение в данный момент.
(1) Сначала я думаю использовать Tag
или Branch
для каждоговерсия http://domain.com/API/{version}. Так что, если выпущен новый API, я Tag
it, экспортирую и публикую в соответствующий URL, но, похоже, сложно смешать разные версии исходного кода в одном веб-приложении.
(2)Затем я подумываю использовать один контроллер для одной версии: (точно так же, как этот вопрос Управление версиями REST API, созданного с помощью ASP.NET MVC 3 - Best Practices )
http://domain.com/API/1.0/{AnAction} => will go to APIV1Controller.{AnAction}
http://domain.com/API/2.0/{AnAction} => will go to APIV2Controller.{AnAction}
, но для каждой версии необходимо написать маршрут.
(3) Третий способ получить идею от API PayPal, которая не является версиейв URL, но в параметре POST.Таким образом, URL-адрес зафиксирован на http://domain.com/API/
, но пользователь должен указать параметр Version
, чтобы иметь "1.0"
или "2.0"
.
Решение для этого: (2) мне подходит, и в настоящее время яиспользуйте этот способ, но я хочу смешать (2) и (3), чтобы у меня был APIController, у которого есть только одно действие Index для проверки этого параметра Version
и передачи запроса соответствующему контроллеру и действия либо APIV1Controller. {AnAction}или APIV2Controller. {AnAction}.
После Googling и Stackoverflowing о том, как передавать, вызывать или вызывать другой контроллер и действие без перенаправления.Кажется, что нет хорошего ответа и хорошей практики.Кто-то отвечает .NET MVC Вызов метода на другом контроллере , просто создав новый экземпляр контроллера.Внезапно я понял, как насчет reroute
!
Вопрос:
Возможно ли reroute
другой контроллер и действие из другого действия безперенаправление и как это сделать?
Или конкретный вопрос, когда пользовательский запрос http://domain.com/API/{AnAction}
с Version="2.0"
, как я могу reroute
с APIController.Index
до APIV2Controller.{AnAction}
?
Я не использую IoC.