我想对控制器操作进行分组。 在控制器级别添加
[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
任何想法/帮助将不胜感激
谢谢
答案 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;
});