簡體   English   中英

將版本控制添加到現有WebAPI

[英]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屬性來使用Microsoftaspnet-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM