OData Error对象是否可以包含任意属性

本文关键字:包含任 属性 Error 对象 是否 OData | 更新日期: 2023-09-27 17:59:43

我正在使用一个新系统,并建立将要返回的错误契约。我正在尝试遵循OData v4错误响应结构。

由于这是一个C#服务,在Exception对象和ODataErrorResponse之间似乎有一个非常好的映射。但是,我们正在尝试确定错误响应对象是否可以包含其他任意属性。内部错误被明确表示为允许具有附加属性,因此以下内容有效:

{
  "error": {
    "code": "BadArgument",
    "message": "Previous passwords may not be reused",
    "target": "password",
    "innererror": {
      "code": "PasswordDoesNotMeetPolicy",
      "minLength": "6",
      "maxLength": "64",
      "minDistinctCharacterTypes": "2",
    }
  }
}

异常上的Data属性与此映射得很好,我们可以将内部异常上的每个值转换为错误上的一个属性。因此,如果客户端将任意属性添加到外部异常中,那么可以将它们作为根的属性公开吗。例如:

{
  "error": {
    "code": "BadArgument",
    "message": "PasswordDoesNotMeetPolicy",
    "target": "password",
    "minLength": "6",
    "maxLength": "64",
    "minDistinctCharacterTypes": "2",
  }
}

或者对于OData来说,这样的东西通常被认为是"糟糕的形式"?

OData Error对象是否可以包含任意属性

如果直接在error对象上添加自定义属性,则会得到非标准的错误响应。代码生成工具和第三方客户端将无法识别自定义属性。

innererror属性是一个扩展点。规范说:"这个对象的内容是服务定义的。通常这个对象包含有助于调试服务的信息。"坚持使用innererror