【发布时间】:2016-05-25 15:44:33
【问题描述】:
使用 .Net 4.5.2
我在 Web Api 中使用版本化路由。
规范要求我们定义以下路由:
/api/v1/members/test
/api/v2/members/test
以下代码在版本 1 中找到正确的方法。
private static IEnumerable<VersionedRoute> GetRoutes(int version)
{
var routes = new List<VersionedRoute>();
if (version >= 1)
{
var versionedRoutes = new List<VersionedRoute>
{
new VersionedRoute(
version,
"Test",
"/Members/{id}/{action}",
new RouteValueDictionary
{
{"controller", "Members"},
{"action", "Test"},
{"id", RouteParameter.Optional}
})
};
routes.AddRange(versionedRoutes);
}
if (version >= 2)
{
var versionedRoutes = new List<VersionedRoute>{
new VersionedRoute(
version,
"TestV2",
"/Members/{id}/{action}",
new RouteValueDictionary
{
{"controller", "MembersV2"},
{"action", "Test"},
{"id", RouteParameter.Optional}
}),
};
routes.AddRange(versionedRoutes);
}
return routes;
}
对于 v1,当我们如下定义方法时,这一切都有效
[HttpGet]
[ActionName("Test")]
public HttpResponseMessage GetTest(string id)
{
var x = "GET: Well helleeoo";
return new HttpResponseMessage(HttpStatusCode.Accepted) {Content = new StringContent(x)};
}
[HttpPut]
[ActionName("Test")]
public HttpResponseMessage PutTest(string id)
{
var x = "PUT: Well helleeoo";
return new HttpResponseMessage(HttpStatusCode.Accepted) { Content = new StringContent(x) };
}
但是,正如您所见,对于 v2 路由,我想将请求定向到不同的控制器 (MembersV2),它会在其中找到 v2 方法但保持相同的路由公开。不幸的是,没有找到 MembersV2,所以当我向 api/v2/members/test 发送请求时,虽然找到了路由,但仍然调用了 Members 控制器并执行了旧的 v1 方法。
这里有什么我不明白的地方。有人可以帮忙吗?
如果我不清楚,请要求更多说明?
【问题讨论】:
标签: c# asp.net-mvc asp.net-web-api