[英]Add versioning to existing WebAPI
我有一個現有的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
param)仍然應該導致初始控制器
我以為我可以通過制作另一個控制器並使用像這樣的ApiVersion
屬性來使用Microsoft的aspnet-api-versioning :
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版本庫來實現這個目的? 或者是否有其他API版本庫可以完成此任務?
這是可能的,你只需要告訴版本控制框架假設一個版本,如果你沒有在配置中指定一個 :
public static void Register(HttpConfiguration config)
{
config.AddApiVersioning(versioningConfig =>
{
versioningConfig.AssumeDefaultVersionWhenUnspecified = true;
});
//snip
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.