【问题标题】:WebApi versioning a single controllerWebApi 版本控制单个控制器
【发布时间】:2017-05-26 18:51:42
【问题描述】:

我刚刚开始接触WebApi,我想了解的是,您是否可以拥有 1 个控制器来处理多个版本。

所以不是有一个v1/v2 文件夹,其中 v2 在 v1 中有控制器的副本,但 v2 中的逻辑与 v1 不同

你能有 1 个控制器来处理所有 api 版本吗?

我在控制器上看到了对 [APiVersion(...)] 属性的引用,但是当我尝试实现我认为正确的东西时,什么都没有被调用

例子:

[ApiVersion("1.0")]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/login")]
public class LoginController : ApiController
{

    [HttpGet]
    [MapToApiVersion("1.0")]
    [Route("login/{username}/{password}")]
    [ResponseType(typeof(LoginResult))]
    public LoginResult GetLoginInfo(string username, string password)
    {
        //v1 logic
    }

    [HttpGet]
    [MapToApiVersion("2.0")]
    [Route("login/{username}/{password}")]
    [ResponseType(typeof(LoginResult))]
    public LoginResult GetLoginInfo2(string username, string password)
    {
        //v2 logic
    }
}

我使用了这个answer 作为参考,但它似乎不起作用。使用动作是解决这个问题的方法吗?

理想情况下,我希望能够在调用它的任何地方更改版本号,而不是更改操作名称,但我不知道这是否可能

【问题讨论】:

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


    【解决方案1】:

    一种方法可能是通过将版本直接放在单个控制器的路由中来确保路由不会发生冲突。

    public class LoginController : ApiController {
    
        [HttpGet]
        [Route("~/api/v1/login/{username}/{password}")]
        [ResponseType(typeof(LoginResult))]
        public LoginResult GetLoginInfo(string username, string password) {
            //v1 logic
        }
    
        [HttpGet]
        [Route("~/api/v2/login/{username}/{password}")]
        [ResponseType(typeof(LoginResult))]
        public LoginResult GetLoginInfo2(string username, string password) {
            //v2 logic
        }
    } 
    

    现在,如果添加了新版本,只需在路由中包含该版本号即可。

    [HttpGet]
    [Route("~/api/v3/login/{username}/{password}")]
    [ResponseType(typeof(LoginResult))]
    public LoginResult GetLoginInfo3(string username, string password) {
        //v3 logic
    }
    

    保持简单...

    【讨论】:

      猜你喜欢
      • 2016-06-15
      • 1970-01-01
      • 2014-09-24
      • 2017-09-21
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      相关资源
      最近更新 更多