Swashbuckle 中一个控制器的多个版本

Rob*_*ick 2 asp.net-web-api swagger swashbuckle

我正在使用 WebApi 和 Swagger/Swashbuckle。

我的所有控制器都有一个版本,但对于其中一个控制器,我想引入版本控制,但也保留旧版本。

因此,对于只有一个版本的 ControllerA,我想继续这样做。

http://mysite/api/ControllerA

对于 ControllerB,我想要的只有两个版本

http://mysite/api/v1/ControllerB http://mysite/api/v2/ControllerB

如果可能的话,我总是可以将未版本化的 url 重定向到 v1。

http://mysite/api/ControllerB

我认为我从根本上需要使用 SingleApiVersion,因为我的大多数控制器只有一个版本。在 SwaggerConfig 里面我有一行:

c.SingleApiVersion("v1", "MySite.Api");
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试此操作时,我无法在 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想我可能混淆了 Single 和 Multiple 属性,但我不想使用整个 API 的多个版本,但我只有一个只有一个控制器的新版本。这可以做到吗?

Dom*_*ald 5

你试过这个吗?

[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!";
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/microsoft/aspnet-api-versioning/wiki/Versioning-via-the-URL-Path