我正在使用WebApi和Swagger / Swashbuckle。
我所有控制器都有一个版本,但是对于其中一个控制器,我想引入版本控制,但也要保留旧版本。
对于ControllerA,我只想继续执行一个版本。
对于ControllerB,我只需要两个版本
http://mysite/api/v1/ControllerB http://mysite/api/v2/ControllerB
如果可能的话,我总是可以将未版本化的网址重定向到v1。
我想我从根本上需要使用SingleApiVersion,因为我的大多数控制器只有一个版本。在SwaggerConfig内部,我一行:
c.SingleApiVersion("v1", "MySite.Api");
但是,当我尝试执行此操作时,无法在Swagger UI中看到MyController或在Postman中调用它
[Route("api/v{version:apiVersion}/[controller]")]
public class MyController : ApiController
{
[ApiVersion("1.0")]
[HttpPost]
public HttpResponseMessage MyMethod([FromBody] MyRequest myRequest)
{
return MyCode(myRequest);
}
[ApiVersion("2.0")]
[HttpPost]
public HttpResponseMessage MyMethod([FromBody] MyRequest myRequest)
{
return MyNewCode(myRequest);
}
}
我想我可能会混合使用Single和Multiple属性,但我不想使用整个API的多个版本,但只有一个带有一个控制器的新版本。能做到吗?
答案 0 :(得分:1)
您尝试过吗?
[ApiVersion( "2.0" )]
[ApiVersion( "3.0" )]
[Route( "api/v{version:apiVersion}/helloworld" )]
public class HelloWorldController : ApiController
{
public string Get() => "Hello world v2!";
[MapToApiVersion( "3.0" )]
public string GetV3() => "Hello world v3!";
}
https://github.com/microsoft/aspnet-api-versioning/wiki/Versioning-via-the-URL-Path