C# Web API 2中的版本控制
有一个关于WebAPI2.0版本控制的快速问题 我已经开发了一个完全RESTful的API,但是我有两个同名的控制器 我将它们按照不同的文件夹放在不同的名称空间中。 (例如v1和v2文件夹) 我还使用普通的NamespaceHttpControllerSelector配置了正确的路由。 所以到目前为止,一切都正常工作 然而,我有一个问题…即使我将EmailsController放在根级别,是否仍然可以对Emails控制器进行版本控制 例如 控制器/v1/EmailControllers 控制器/电子邮件控制器 这还可能吗 编辑: 我忘了提到我没有使用C# Web API 2中的版本控制,c#,asp.net-mvc,C#,Asp.net Mvc,有一个关于WebAPI2.0版本控制的快速问题 我已经开发了一个完全RESTful的API,但是我有两个同名的控制器 我将它们按照不同的文件夹放在不同的名称空间中。 (例如v1和v2文件夹) 我还使用普通的NamespaceHttpControllerSelector配置了正确的路由。 所以到目前为止,一切都正常工作 然而,我有一个问题…即使我将EmailsController放在根级别,是否仍然可以对Emails控制器进行版本控制 例如 控制器/v1/EmailControllers 控制器
RoutePrefix
属性,因为我一直在RouteConstraint
上接收错误
我用以下内容装饰了我的操作方法(这似乎有点多余,因为它们基本上具有相同的名称空间):
[路由(“api/{apiVersion1:ApiVersion1Constraint(v1)}/emails/LogEmails”,Name=“LogEmailsRoute_1”)]
您应该在控制器上使用RoutePrefix
属性。
更多信息。您是否尝试过使用[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!";
}
谢谢你的回复。我的第一个意图是在控制器级别使用
RoutePrefix
属性。尽管如此,我还是收到了许多错误,说明我的路线约束不起作用。不过,我会检查这个链接。不久前,我用一个路由控制器解决了这个问题。但是谢谢你的回复。