我有一个现有的 ASP.NET WebAPI 项目,其 Controller 如下所示:
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
现在,我想制作此 Controller 的另一个版本,如果客户端附加某个查询字符串参数,将被调用,如下所示:/api/accounts/123?api-version=2
。第一个 URL(没有 api-version
参数)应该仍然指向初始 Controller
我以为我可以使用 aspnet-api-versioning by Microsoft通过制作另一个 Controller 并使用 ApiVersion
属性,如下所示:
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
属性装饰我的两个 Controller ,并在两个 URL 中明确使用版本:/api/accounts/123?api-version=1
和 /api/accounts/123?api-version=2
。
但我需要第一个 Controller 的 URL 保持与现在相同:/api/accounts/123
。有什么方法可以通过 aspnet-api-versioning 实现这一点
图书馆?或者是否有其他一些 API 版本控制库可以完成此任务?
最佳答案
这是可能的,你只需要告诉版本控制框架assume a version if you don't specify one in the config :
public static void Register(HttpConfiguration config)
{
config.AddApiVersioning(versioningConfig =>
{
versioningConfig.AssumeDefaultVersionWhenUnspecified = true;
});
//snip
}
关于c# - 向现有 WebAPI 添加版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45060405/