У меня есть веб-api с двумя версиями v1 и v2, они похожи на папки в контроллерах, эти папки содержат контроллеры с одинаковыми именами и методами. Мой WebApiConfig выглядит так
config.Routes.MapHttpRoute(
"DefaultApi",
"api/v{version}/{controller}/{id}",
new {id = RouteParameter.Optional}
);
config.Services.Replace(typeof(IHttpControllerSelector), new HttpControllerSelector((config)));
Соответственно, мои ссылки выглядят как api/v1/custum/get?id=3
и api/v2/custum/get?id=3
, как я могу делать навигацию по ссылке api/custum/get?=3
в последней версии, т.е. при v2/custum/get?id=3
Имейте конфигурацию маршрута для версий API и резервной конфигурации. Например,
config.Routes.MapHttpRoute(
name: "VersionedApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Первый отображает вызовы с конкретной версией. Второй вариант не имеет версии на маршруте. В вашем HttpControllerSelector
попробуйте получить значение для version
, если оно не существует для второй конфигурации маршрута, установите его по умолчанию.
Вы можете установить значение по умолчанию для параметра версии следующим образом:
config.Routes.MapHttpRoute(
"DefaultApi",
"api/{version}/{controller}/{id}",
new
{
version="v2",
id = RouteParameter.Optional
}