【发布时间】:2017-07-14 17:38:08
【问题描述】:
我有一个现有的 ASP.NET WebAPI 项目,其控制器如下所示:
namespace WebSite.WebApi.Controllers
{
[RoutePrefix("api/accounts")]
public class AgreementsController : ApiController
{
// GET ~/api/accounts/xxx
[Route("{accountId}")]
public IHttpActionResult Get(string accountId) => Ok( $"Account #{accountId} from default controller");
}
}
我正在使用此 URL 调用操作方法:/api/accounts/123
现在,我想制作这个控制器的另一个版本,如果客户端附加一个特定的查询字符串参数,就像这样:/api/accounts/123?api-version=2。第一个 URL(不带 api-version 参数)仍应指向初始控制器
我想我可以通过制作另一个控制器并像这样使用ApiVersion 属性来使用aspnet-api-versioning by Microsoft:
namespace WebSite.WebApi.Controllers.V2
{
[ApiVersion("2")]
[RoutePrefix("api/accounts")]
public class AgreementsController : ApiController
{
// GET ~/api/accounts/xxx?api-version=2
[Route("{accountId}")]
public IHttpActionResult Get(string accountId) => Ok($"Account #{accountId} from V2 controller");
}
}
但它似乎并不像那样工作。 GitHub 上的所有示例都建议我应该用 ApiVersion 属性装饰我的两个控制器,并在两个 URL 中明确使用版本:/api/accounts/123?api-version=1 和 /api/accounts/123?api-version=2。
但我需要第一个控制器的 URL 保持与现在相同:/api/accounts/123。有什么方法可以通过 aspnet-api-versioning 实现这一点
图书馆?或者是否有其他 API 版本控制库可以完成这项任务?
【问题讨论】:
标签: c# asp.net-web-api