首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向现有WebAPI添加版本控制

向现有WebAPI添加版本控制
EN

Stack Overflow用户
提问于 2017-07-12 22:24:07
回答 1查看 1.5K关注 0票数 3

我有一个现有的ASP.NET WebAPI项目,它有一个控制器,如下所示:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
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版本化库可以完成此任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 22:29:53

这是可能的,您只需将版本控制框架告知assume a version if you don't specify one in the config

代码语言:javascript
复制
public static void Register(HttpConfiguration config)
{
    config.AddApiVersioning(versioningConfig =>
    {
        versioningConfig.AssumeDefaultVersionWhenUnspecified = true;
    });

    //snip
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45060405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档