我有一些属性,这些属性我不想在swagger UI中公开,但是如果将它们传递给控制器,则仍然允许对它们进行反序列化。 Json ignore无法正常工作,因为它仍然显得张扬,并且不允许对该属性进行序列化和反序列化。
我创建了一个exclude属性,并将其应用于该属性,创建了一个模式过滤器,并将其添加到启动项中。但是该属性仍然显得张扬。
[AttributeUsage(AttributeTargets.Property)]
public class SwaggerExcludeAttribute : Attribute
{
}
已添加到媒体资源
[SwaggerExcludeAttribute]
public int? ContentType { get; set; }
过滤器:
public class SwaggerExcludeSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
if (schema?.Properties.Count == 0)
{
return;
}
const BindingFlags bindingFlags = BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance;
var memberList = context.Type
.GetFields(bindingFlags).Cast<MemberInfo>()
.Concat(context.Type
.GetProperties(bindingFlags));
var excludedList = memberList.Where(m =>
m.GetCustomAttribute<SwaggerExcludeAttribute>()
!= null)
.Select(m =>
(m.GetCustomAttribute<JsonPropertyAttribute>()
?.PropertyName
?? m.Name.ToCamelCase()));
foreach (var excludedName in excludedList)
{
if (schema.Properties.ContainsKey(excludedName))
schema.Properties.Remove(excludedName);
}
var excludedProperties = context.Type.GetProperties().Where(
t => t.GetCustomAttribute<SwaggerExcludeAttribute>() != null);
foreach (var excludedProperty in excludedProperties)
{
var propertyToRemove =
schema.Properties.Keys.SingleOrDefault(
x => x.ToLower() == excludedProperty.Name.ToLower());
if (propertyToRemove != null)
{
schema.Properties.Remove(propertyToRemove);
}
}
}
}
在启动中:
services.AddSwaggerGen(c => { c.SchemaFilter<SwaggerExcludeSchemaFilter>(); });
内容类型仍然出现在招摇的文档中。有人有其他建议或方法来实现这一目标吗?
答案 0 :(得分:1)
使用最新版本:5.4.1
pValues[k] = statsmodels.stats.anova_lm(data=y)."Pr(>F)"[1]
答案 1 :(得分:0)
问题似乎在这里
m.Name.ToCamelCase()
因为所有属性均为小写
m.Name.ToLower()
在调试模式下可以看到它