c# - 向现有 WebAPI 添加版本控制

标签 c# asp.net-web-api

我有一个现有的 ASP.NET WebAPI 项目,其 Controller 如下所示:

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

现在,我想制作此 Controller 的另一个版本,如果客户端附加某个查询字符串参数,将被调用,如下所示:/api/accounts/123?api-version=2。第一个 URL(没有 api-version 参数)应该仍然指向初始 Controller

我以为我可以使用 aspnet-api-versioning by Microsoft通过制作另一个 Controller 并使用 ApiVersion 属性,如下所示:

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 属性装饰我的两个 Controller ,并在两个 URL 中明确使用版本:/api/accounts/123?api-version=1/api/accounts/123?api-version=2

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

最佳答案

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

关于c# - 向现有 WebAPI 添加版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45060405/

相关文章:

c# - 从文件中读取数据时将排序后的数据添加到哈希表或字典中

c# - 多个 DataGrid 列标题的绑定(bind)

c# - 如何防止在构造函数完成之前调用事件处理程序?

c# - GZip header 中的魔数(Magic Number)不正确。确保您传入的是 GZip 流

c# - Entity Framework core 2.0.3 未提供数据库中的最新数据

c# - 动态实例化 5 个表的 5 个计时器(UNITY 3D)

c# - 将其传递给基础构造函数

asp.net-web-api - Xamarin.iOS - WebApi 连接被拒绝

c# - ASP.NET Web API 帮助页面无法处理通用类型 Controller

c# - DelegatingHandler 设置 CurrentPrincipal