【问题标题】:Add versioning to existing WebAPI向现有 WebAPI 添加版本控制
【发布时间】:2017-07-14 17:38:08
【问题描述】:

我有一个现有的 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 中明确使用版本:/api/accounts/123?api-version=1/api/accounts/123?api-version=2

但我需要第一个控制器的 URL 保持与现在相同:/api/accounts/123。有什么方法可以通过 aspnet-api-versioning 实现这一点 图书馆?或者是否有其他 API 版本控制库可以完成这项任务?

【问题讨论】:

    标签: c# asp.net-web-api


    【解决方案1】:

    这是可能的,你只需告诉版本控制框架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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 2020-06-27
      相关资源
      最近更新 更多