使用Swashbuckle的.NET Core中每个区域每个版本的OpenAPI定义文件

问题描述

我在Swashbuckle中使用Microsoft.AspNetCore.Mvc.Versioning,Swashbuckle使用启动配置为每个版本生成定义文件

id    relates_to_id
1          1
2          1
2          2
. . .

在Swagger用户界面中,这给出了:

Definition per version in SwaggerUI

URL为:

app.UseSwaggerUI(c =>
{
    // generate endpoint for each version
    foreach (var description in provider.ApiVersionDescriptions)
    {
        c.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json",description.GroupName.toupperInvariant());
    }
});

我想通过控制器上的属性api\v1\fruit 引入API路由:

Area

因此,OpenAPI定义文件也按区域划分:

Swagger definitions per area

使用网址:

[ApiVersion("2.0")]
[Area("Private")]

我该如何实现?

解决方法

我认为这可能对您有所帮助,尽管我担心这不是一个完整的解决方案。

https://github.com/microsoft/aspnet-api-versioning/issues/516#issuecomment-561348964

看来,如果你使用格式'options.GroupNameFormat = "'v'VVV";' 然后版本控制的最后一部分可以是字母数字,即您应该能够像这样编写版本;

[ApiVersion("3.0.session")]
[ApiVersion( "3.0.authoring" )]

tread 的进一步下方,另一个建议使用替代配置,允许您切换名称,以便在 swagger 文档中颠倒版本和名称,即 ApiVersion 3.0.session 变为 {{1} } .