【问题标题】:Versioning in Web API 2Web API 2 中的版本控制
【发布时间】:2017-04-29 03:32:57
【问题描述】:

有一个关于 Web Api 2.0 版本控制的快速问题。

我已经开发了一个完全 RESTful API,但是我有 2 个同名的控制器。

我根据不同的文件夹将它们放在不同的命名空间中。 (例如 v1 和 v2 文件夹)。

我还使用普通的 NamespaceHttpControllerSelector 配置了正确的路由。 所以到目前为止一切正常。

但是我有一个问题......是否有可能仍然有版本控制电子邮件控制器即使我将电子邮件控制器放在根级别

例如

控制器/v1/EmailControllers

控制器/电子邮件控制器

这还有可能吗?

编辑:

我忘了提到我没有使用RoutePrefix 属性,因为我一直在我的RouteConstraint 上收到错误。

我用以下内容修饰了我的操作方法(这似乎有点多余,因为它们本质上具有相同的命名空间):

[Route("api/{apiVersion1:ApiVersion1Constraint(v1)}/emails/LogEmails", Name = "LogEmailsRoute_1")]

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您是否尝试过使用 [ApiVersion] 属性

        [ApiVersion( "1.0", Deprecated = true )]    
        [ApiVersion( "2.0" )]
        [ApiVersion( "3.0" )]
        [Route( "api/v{version:apiVersion}/email" )]
        public class Email2Controller : Controller {
    
        [HttpGet]
        public string Get() => "Email  v2!";
    
        [HttpGet, MapToApiVersion( "3.0" )]
        public string GetV3() => "Email v3!";
    
        }
    

    【讨论】:

    • 前段时间我已经设法使用路由控制器解决了这个问题。不过谢谢你的回复。
    【解决方案2】:

    您应该在控制器上使用RoutePrefix 属性。 更多here.

    【讨论】:

    • 感谢您的回复。我的第一个意图是在控制器级别使用RoutePrefix 属性。虽然,我收到了许多错误,说明我的路线约束不起作用。不过我会检查这个链接。
    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 2016-07-17
    • 2017-03-18
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多