swagger - 在 Swashbuckle 文档过滤器中获取自定义属性属性装饰
问题描述
我在 .net 5.0 项目中使用 Swashbuckle 6.1.4。
我想自定义模式中元素的顺序。默认顺序(即声明属性的顺序)不好,因为当模型扩展基本模型时,基本模型的属性列在底部。
我设法应用文档过滤器按字母顺序对属性进行排序:
public class SchemaSortingFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
var descs = context.ApiDescriptions.ToList();
// only applying to the SupporterDTO for now...
string model = "SupporterDTO";
if (swaggerDoc.Components.Schemas.ContainsKey(model))
{
var props = swaggerDoc.Components.Schemas[model].Properties.OrderBy(x => x.Key).ToArray();
swaggerDoc.Components.Schemas[model].Properties.Clear();
foreach (var prop in props)
{
swaggerDoc.Components.Schemas[model].Properties.Add(prop.Key, prop.Value);
}
}
}
}
但我真正想要的是使用自定义属性来管理订单。像这样:
public class SwaggerOrderAttribute : Attribute
{
public int Order { get; private set; }
public SwaggerOrderAttribute(int order)
{
Order = order;
}
}
我会用它来装饰属性:
[SwaggerOrder(1)]
String PropertyZ {get; set;}
[SwaggerOrder(3)]
String PropertyX {get; set;}
[SwaggerOrder(2)]
String PropertyY {get; set;}
我的问题是通过 swaggerDoc.Components.Schemas[model].Properties 在我的过滤器中公开的属性值列表不包括我的自定义属性。
在我的探索过程中,由于这个问题的提示,我试图像这样抓住它们,但它没有看到它们:
if (apiDesc.TryGetMethodInfo(out MethodInfo mi))
{
var atts = mi.DeclaringType
.GetCustomAttributes(true)
.OfType<SwaggerOrderAttribute>()
.ToList();
}
如何引入我的自定义属性以包含在我的排序 linq 查询中?
解决方案
推荐阅读
- data-structures - 需要多少缓存命中率来维持此 CAM 中的平均查找时间
- react-redux - 将 reducer 包含到 combineReducers 中,缺少一些东西
- apache-poi - 在Word文件中编辑折线图数据时,返回到表格中定义的数据
- python - 如何使用selenium web-driver python单击网页中目录列表的不同链接
- git - git merge branch to tag - 旧版本的补丁
- c# - AspNet Core3 身份配置
- regex - 珀尔 | 从 3 行到 1 行的简单正则表达式。更改字符和删除字符
- php - 如何使用高级自定义字段(ACF wordpress 插件)在谷歌地图中搜索指定区域或城市内的地点
- android - Android WifiLock 在 Android 上无法正常工作
- c - 打印时出现 C 程序错误