swashbucle aspnet.core组名

时间:2018-11-29 15:02:33

标签: swagger swashbuckle

我想对控制器操作进行分组。 在控制器级别添加

[ApiExplorerSettings(GroupName ="Test")]

在添加的SwaggerGen选项上

c.DocInclusionPredicate((_, api) => !string.IsNullOrWhiteSpace(api.GroupName));
c.TagActionsBy(api => api.GroupName);

这很好

然后我介绍了版本控制。 在添加的SwaggerGen选项上

var provider = services.BuildServiceProvider()
               .GetRequiredService<IApiVersionDescriptionProvider>();
foreach (var description in provider.ApiVersionDescriptions)
{
    c.SwaggerDoc(description.GroupName,
        new Info()
        {
            Title = $"{description.ApiVersion}",
            Version = description.ApiVersion.ToString(),
            Description = "Developer Guide",
        });
}

现在,它无法加载定义。如果我只添加

c.TagActionsBy(api => api.GroupName);

然后通过版本号将操作分组。 我正在使用Swashbuckle.AspNetCore 4.0.1和.NET Core 2.1

任何想法/帮助将不胜感激

谢谢

3 个答案:

答案 0 :(得分:0)

好,还有更多的比赛机会,我想我已经解决了,添加了

c.TagActionsBy(api => new[] { "Test" });

在SwaggerGen的每个api版本组中

感谢大家的光临,并为您浪费时间

答案 1 :(得分:0)

这不是完整的代码,但是它显示了您需要做的要点。创建版本信息构建器的列表,然后将其应用到大张旗鼓的配置中

var versionSupportResolver = new Func<ApiDescription, string, bool>((apiDescription, version) =>
{
    var path = apiDescription.RelativePath.Split('/');
    var pathVersion = path[1];
    return string.Equals(pathVersion, version, StringComparison.OrdinalIgnoreCase);
});

var versionInfoBuilder = new Action<VersionInfoBuilder>(info => {
    info.Version("v2", "My API v2");
    info.Version("v1", "My API v1");
});

GlobalConfiguration.Configuration
    .EnableSwagger(c =>
    {
        /// ...
        /// ...
        c.MultipleApiVersions(versionSupportResolver, versionInfoBuilder);
        /// ...
        /// ...
    });

答案 2 :(得分:0)

我遇到了同样的问题,并通过以下方法解决了该问题...

options.TagActionsBy(api =>
{
    string tag;
    if (api.ActionDescriptor is ControllerActionDescriptor descriptor)
    {
        var attribute = descriptor.EndpointMetadata.OfType<ApiExplorerSettingsAttribute>().FirstOrDefault();
        tag = attribute?.GroupName ?? descriptor.ControllerName;
    }
    else
    {
        tag = api.GroupName;
    }

    var tags = new List<string>();
    if (!string.IsNullOrEmpty(tag))
    {
        tags.Add(tag);
    }
    return tags;
});