【问题标题】:NSwag and multiple api versionsNSwag 和多个 api 版本
【发布时间】:2020-09-29 14:54:47
【问题描述】:

考虑以下控制器:

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 */ }
    }
}

Startup 类中的 Swagger 文档:

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 将它们分开?

【问题讨论】:

    标签: asp.net-core swagger nswag nswagstudio aspnet-api-versioning


    【解决方案1】:

    我认为您缺少用于选择 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" };
    });
    

    【讨论】:

    • 我认为这是缺少的部分。
    猜你喜欢
    • 2018-11-09
    • 2019-01-13
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多