【发布时间】:2014-01-14 23:44:20
【问题描述】:
我有一个基于 WebApi v1 的 WebApi 项目,它使用以下内容来确定要使用的 API 版本...
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() 不包含对控制器的任何引用(我可以找到),则此过程将失败。
这是否意味着我只能通过在路由本身中包含版本来进行版本控制?
【问题讨论】:
标签: c# asp.net-web-api