我有一个现有的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中显式地使用version:/api/accounts/123?api-version=1和/api/accounts/123?api-version=2。
但是我需要第一个控制器的网址保持不变:/api/accounts/123。有没有办法使用aspnet-api-versioning库来实现这一点?或者,是否有其他API版本化库可以完成此任务?
发布于 2017-07-12 22:29:53
这是可能的,您只需将版本控制框架告知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
}https://stackoverflow.com/questions/45060405
复制相似问题