将版本控制添加到现有WebAPI

时间:2017-07-12 14:24:07

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

我有一个现有的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版本库可以完成此任务?

1 个答案:

答案 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
}