ASP.NET Core Web API Swagger 按标签Tags分组排序显示

ASP.NET Core Web API Swagger 按标签Tags分组排序显示
需求
swagger页面按标签Tags分组显示。
没有打标签Tags的接口,默认归到"未分组"。
分组内按接口路径排序
说明
为什么没有使用GroupName对接口进行分组?
暂时不需要,以及不想点击swagger页面右上角那个下拉框。
当然Tags和GroupName不冲突,不影响通过GroupName再分组显示。
如何实现
1. 为controller或action打上标签
TagsAttribute特性可以打在controller类上,也可以打在action方法上,一个类或方法上可以打多个标签。示例:
[Tags("标签1", "标签2")]有个小坑,Tags要么打在controller上,要么打在action上,不能同时打。
2. 实现IDocumentFilter接口
清空原有的Tags,并按接口类或方法上的标签重新添加Tags,然后排序。
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using Utils;
namespace DotnetDatamining.Filters
{ /// <summary>
/// Workaround for https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/2162
/// When adding XML controller descriptions to the swagger description document,
/// controllers are listed out of alphabetical order.
///
/// This filter explicitly reorders them.
/// </summary>
public class TagReorderDocumentFilter : IDocumentFilter
{ /// <summary>
/// Allows customization of the swagger description document
/// </summary>
/// <param name="swaggerDoc">The generated swagger description document</param>
/// <param name="context">Context information</param>
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.Tags.Clear(); //清空Tags
//重新添加Tags
foreach (var path in swaggerDoc.Paths)
{
foreach (var o in path.Value.Operations)
{
foreach (var tag in o.Value.Tags)
{
swaggerDoc.Tags.Add(tag);
}
}
} //排序
swaggerDoc.Tags = swaggerDoc.Tags
.OrderBy(tag => TinyPinYinUtil.GetPinYin(tag.Name)) //按汉字拼音排序
.ToList();
}
}
}3. Swagger配置
//swagger配置builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "XXX",
Version = "1.0",
Description = "XXX"
});
vASP.NET Core Web API Swagger 按标签Tags分组排序显示
ASP.NET Core Web API Swagger 按标签Tags分组排序显示需求swagger页面按标签Tags分组显示。没有打标签Tags的接口,默认归到"未分组"...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



