SwashBuckle / Swagger隐藏了我的不变属性

时间:2019-05-11 06:21:31

标签: c# swagger swashbuckle

对于通过[FromBody]传递到动作的模型,我想使它们的属性不可变public int SomeProperty { get; private set; }。这样,我知道对处理程序的输入没有被修改。

我遇到的问题是Swagger和Swashbuckle完全忽略了那些用于渲染参数有效载荷示例的字段。我查看了从我们的API生成的一般模式,发现所有提到的字段都有readOnly: true

我想知道是否可以通过某种方式将Swashbuckler或Swagger配置为不忽略这些属性。还是有某种方法可以使用SwashBuckle扩展框架的一部分将每个定义的readonly设置为false?

编辑:从swagger.json添加示例

在此示例中,someProperty标记为readOnly。我认为这就是为什么该属性未显示在POST参数的生成示例中的原因。如果有办法让swagger gen不添加任何只读属性,我会满意的。

{
  "type": "object",
  "properties": {
    "someProperty": {
      "format": "int32",
      "type": "integer",
      "readOnly": true
    },
  }
}

1 个答案:

答案 0 :(得分:1)

所以我找到了解决方案。我创建了一个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;
            }
        }
    }
}