У меня есть WebAPI проект, основанный на WebAPI v1, который использует следующие определения версии API для использования ...Versioning в WebApi2 используя атрибут Routing
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
var controllers = GetControllerMapping();
var routeData = request.GetRouteData();
var controllerName = (string)routeData.Values["controller"];
HttpControllerDescriptor result = null;
if (!controllers.TryGetValue(controllerName, out result))
{
string version;
if (!GetVersionFromMediaType(request, out version))
{
if (!GetVersionFromAcceptHeaderVersion(request, out version))
{
if (!GetVersionFromHeader(request, out version))
{
if (!GetVersionFromQueryString(request, out version))
{
version = LATEST_VERSION;
}
}
}
}
HttpControllerDescriptor versionedDescriptor;
var newName = string.Concat(controllerName, "V", version);
if (controllers.TryGetValue(newName, out versionedDescriptor))
{
result = versionedDescriptor;
}
}
return result;
}
Я стучит вверх тест, используя WebApi2 и я отмечаю, что этот процесс терпит неудачу, если я определил свои маршруты с использованием маршрутизации атрибутов, так как request.GetRouteData()
не содержит ссылки (которые я могу найти) на контроллер.
Означает ли это, что я ограничен версиями, включив версию в сам маршрут?