对于通过[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
},
}
}
答案 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;
}
}
}
}