c# - SwashBuckle/Swagger 隐藏了我的不可变属性
问题描述
对于通过 I 传递给操作的模型,[FromBody]
我喜欢让它们的属性不可变public int SomeProperty { get; private set; }
。这样我就知道我的处理程序的输入没有被修改。
我遇到的问题是 Swagger 和 Swashbuckle 完全忽略了这些字段以呈现参数有效负载的示例。我查看了从我们的 API 生成的 swagger 模式,发现所有提到的字段都有readOnly: true
.
我想知道是否有某种方法可以配置 Swashbuckler 或 Swagger 以不忽略这些属性。或者也许有一些方法可以使用 SwashBuckle 的扩展框架的某些部分将每个定义的 readonly 设置为 false?
编辑:从 swagger.json 添加示例
在此示例中, someProperty 被标记为只读。我认为这就是为什么该属性没有出现在生成的 POST 参数示例中的原因。如果有办法让 swagger gen 不添加任何只读属性,我会很好。
{
"type": "object",
"properties": {
"someProperty": {
"format": "int32",
"type": "integer",
"readOnly": true
},
}
}
解决方案
所以我找到了解决方案。我创建了一个 ISchemaFilter 实现,它只是将每个属性的 readonly 设置为 false。我需要更多地考虑这对下游意味着什么,所以我不确定我是否喜欢这个解决方案。
public class IgnoreReadOnlySchemaFilter : ISchemaFilter
{
public void Apply(Schema schema, SchemaFilterContext context)
{
schema.ReadOnly = false;
if (schema.Properties != null)
{
foreach (var keyValuePair in schema.Properties)
{
keyValuePair.Value.ReadOnly = false;
}
}
}
}
推荐阅读
- android - 更改对话框按钮颜色
- handlebars.js - 用于在 Handlebars 表达式中使用收件人变量批量发送的 Mailgun 模板
- mysql - 如何首先通过 id 获取特定行,然后按特定列按字母顺序对其余行进行排序
- azure - 从 Databricks 访问 AzureDataLake Gen2
- yii2 - Yii2 覆盖 yii2-giiant
- java - 如何在没有 ListView 的情况下在 ArrayList 中添加 OnitemClickListener
- python - 如何在类范围外访问变量定义的浏览按钮类
- python - 我正在使用 django,但我的静态文件没有加载
- javascript - 嵌套函数不汇总值
- triggers - Notes 对象上的触发器未触发