当前位置: 首页 > 知识库问答 >
问题:

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

姜乐家
2023-03-14

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

我遇到的问题是Swagger和Swashuckle完全忽略了这些字段来呈现参数有效负载的示例。我查看了从我们的API生成的swagger模式,发现所有提到的字段都有只读:true

我想知道是否有办法配置Swashbuckler或Swagger,使其不忽略这些属性。或者,也许有某种方法可以使用Swashback扩展框架的某些部分将每个定义的readonly设置为false?

编辑:从swagger添加示例。json

在本例中,someProperty被标记为只读。我认为这就是为什么该属性没有显示在生成的POST参数示例中的原因。如果有一种方法可以让swagger gen不添加任何只读属性,我会接受的。

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

共有1个答案

秋向阳
2023-03-14

所以我找到了一个解决方案。我创建了一个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;
            }
        }
    }
}
 类似资料:
  • 而在帖子上,我应该看到的只是: 尝试添加:@apimodelproperty(readonly=true)。但那没用。

  • 使用斜扣。ASP中的AspNetCore。NET Core webapp,我们有如下响应类型: 使用Swashback发出swagger API JSON时,这将变成: 这里的问题是,DateTime是一种值类型,不能为null;但是发出的Swagger API JSON没有将这两个属性标记为必需的。这种行为对于所有其他值类型都是一样的:int、long、byte等,它们都被认为是可选的。 为了完

  • 我有一个类用户 我的控制器 它大摇大摆地显示

  • 问题内容: 使用Angular Material时,我一直看到aria属性。有人可以向我解释,aria前缀是什么意思?但最重要的是,我想了解的是和属性之间的区别。 问题答案: ARIA(可访问的富Internet应用程序)定义了一种使残障人士更容易访问Web内容和Web应用程序的方法。 该属性是HTML5中的新增属性,它告诉 浏览器 不要显示该元素。该属性告诉 屏幕阅读器 是否应该忽略该元素。请查

  • 问题内容: 是否可以编写和创建Firefox中的Firebug插件无法捕获的JavaScript Ajax请求? 我之所以这样询问,是因为我可以在Facebook上看到没有正在进行的Ajax请求,但是当我从另一个帐户发送消息时,顶部的消息框仍会添加“ 1条未读消息”指示符。甚至有可能实现? 谢谢。 问题答案: Firebug将“标准” AJAX请求记录到控制台面板;这些是使用ActiveX / X

  • 我在一个...NET Core 3.1项目,将我的XML注释导入到Swagger中。我在一个控制器上有一个POST请求,我想在Swagger中注册一些响应状态(201, 401, 403, 404)。问题是,在文件和Swagger UI界面中,我还看到一个200成功响应与我显式指定的状态代码响应并列。 正如在多个不同的地方建议的那样,我正在使用属性来尝试并防止这种情况,但是我所尝试的一切仍然会导致