这里有两种方法不需要您拥有 2 个单独的 Controller 类。
请求标头
推荐的版本控制设计之一是使用请求标头而不是 URL 参数。
if (Request.Headers["API Version"] == "2")
{
return Version2Code();
}
return Version1Code();
使用 RouteContraint
你也可以使用路由约束:
config.Routes.MapHttpRoute(
name: "versionedApi",
routeTemplate: "api/{version}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new {version = @"^[vV]\d+$"}
);
那么version就变成了跟id一样的路由函数参数了。
public class AccountController: Controller {
public class ActionResult Index(object id, string version)
{
if (string.Equals(version, "v2", StringComparison.OrdinalIgnoreCase))
{
return Version2Code();
}
return Version1Code();
}
}
另外,请查看 Web API 2 属性路由
此外,如果您确实升级到 Mvc 5 和 WebAPI 2,还有一些示例说明如何使用属性路由 http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 进行此操作