3

考虑以下控制器:

namespace Web.Controllers
{
    [ApiVersioning("1.0")
    [Route("api/v{version:apiVersion}/[controller]")]
    public class Product : ApiController
    {
        [HttpGet("id")]
        public IHttpActionResult<bool> GetProduct(Guid id) 
        { /* rest of the code */ }
    }
}

namespace Web.Controllers
{
    [ApiVersioning("2.0")
    [Route("api/v{version:apiVersion}/[controller]")]
    public class Product2 : ApiController
    {
        [HttpGet("id")]
        public IHttpActionResult<bool> GetProduct(Guid id) 
        { /* rest of the code */ }
    }
}

以及课堂上的 Swagger 文档Startup

services.AddSwaggerDocument(config =>
{
    config.DocumentName = "v1.0";
    config.PostProcess = document =>
    {
        document.Info.Version = "v1.0";
    };
});

services.AddSwaggerDocument(config =>
{
    config.DocumentName = "v2.0";
    config.PostProcess = document =>
    {
        document.Info.Version = "v2.0";
    };
});

现在,在使用NSwag测试 API 浏览器后,它会忽略版本并显示 v1 和 v2 文档中的所有 API。

如何告诉 NSwag 将它们分开?

4

1 回答 1

4

我认为您缺少用于选择 Api 版本的 ApiGroupNames 属性。请像下面的代码一样添加 ApiGroupNames 属性并告诉我们。

services.AddSwaggerDocument(config =>
{
    config.DocumentName = "v1.0";
    config.PostProcess = document =>
    {
        document.Info.Version = "v1.0";
    };
    config.ApiGroupNames = new[] { "1.0" };
});

services.AddSwaggerDocument(config =>
{
    config.DocumentName = "v2.0";
    config.PostProcess = document =>
    {
        document.Info.Version = "v2.0";
    };
    config.ApiGroupNames = new[] { "2.0" };
});
于 2020-06-10T09:32:02.727 回答