我有一个现有的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");
}
}
我使用此网址调用操作方法:/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
属性修饰我的控制器,并在两个网址中明确使用版本:/api/accounts/123?api-version=1
和/api/accounts/123?api-version=2
。
但我需要第一个控制器的URL保持与现在相同:/api/accounts/123
。有没有办法用aspnet-api版本来实现这一点
图书馆?或者是否有其他API版本库可以完成此任务?
答案 0 :(得分:3)
这是可能的,您只需要将版本控制框架告诉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
}