Web API 2中的版本控制

4

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

我开发了一个完全符合RESTful API的应用程序,但是我有两个同名的控制器。

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

enter image description here

我还使用了正常的NamespaceHttpControllerSelector配置了正确的路由。

到目前为止,一切都正常。

然而,我有一个问题...即使我将EmailsController放在根级别上,仍然可以为Emails控制器进行版本控制吗?

例如:

Controllers/v1/EmailControllers

Controllers/EmailsControllers

这仍然可能吗?

编辑:

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

我已经在我的操作方法上使用了以下装饰(这似乎有些多余,因为它们本质上具有相同的命名空间):

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

2个回答

6

你尝试使用 [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!";

    }

我之前使用路由控制器解决了这个问题。但还是谢谢你的回复。 - Rahul Kishore

0

你应该在控制器上使用 RoutePrefix 属性。更多信息请参见这里


谢谢回复。我最初的意图是在控制器级别使用“RoutePrefix”属性。然而,我收到了许多错误,指出我的路由约束不起作用。不过我会查看这个链接。 - Rahul Kishore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接