首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebApi版本控制单个控制器

WebApi版本控制单个控制器
EN

Stack Overflow用户
提问于 2017-05-26 18:51:42
回答 1查看 961关注 0票数 2

我刚刚开始进入WebApi,我想要了解的是,您是否可以拥有一个处理多个版本的控制器。

因此,与v1/v2文件夹不同,v2在v1中有控制器的副本,但是v2中的逻辑与v1不同

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

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

示例:

代码语言:javascript
复制
[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作为参考,但它似乎不起作用。用行动来解决这个问题吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-27 01:55:37

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

代码语言:javascript
复制
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
    }
} 

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

代码语言:javascript
复制
[HttpGet]
[Route("~/api/v3/login/{username}/{password}")]
[ResponseType(typeof(LoginResult))]
public LoginResult GetLoginInfo3(string username, string password) {
    //v3 logic
}

保持简单..。

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

https://stackoverflow.com/questions/44208399

复制
相关文章

相似问题

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