Audit.Net 自定义字段放置在手动范围创建和基于操作的范围创建之间具有不同之处

Audit.Net customfields placement bahaves differently between manual scope creation and action based scope creation

在 WebApi 中使用 Audit.Net 时,会在每个控制器操作事件上创建一个范围,当我们添加自定义字段时,它们会出现在 json 的根级别。但是当我们手动创建审计范围时,如果您将任何自定义字段添加到审计范围,那么它们将嵌套在 'customfields' 标签下。不确定为什么这种行为对于两种范围类型创建都是不同的。

见下例: 这是由调用控制器上的操作时创建的 auditscope 生成的: AuditInfo 是通过 auditScope.SetCustomField("AuditInfo",auditInfo);

添加的
{
    "EventType": "TestEvent",
    "Environment": {
        "DomainName": "IIS APPPOOL",
    },
    "Action": {
        "ActionParameters": {
            }
        },
        "RequestBody": {
            "Type": "application/json",
            "Length": 3191
        },
        "Headers": {
        },
        "ResponseHeaders": {
        }
    },
    "AuditInfo": {
        "UserIdentifier": "",
        "ClaimType": "iss",
        "AuditType": 0
    },
    "id": "",
    "_ts": 1627916814
}

以下json是我使用AuditScope.CreateAsync方法手动创建AuditScope时产生的:

  "EventType": "TestEvent",
  "CustomFields": {
        "AuditInfo": {
            "UserIdentifier": "",
            "ClaimType": "",
            "AuditType": 0
        }
    }

如果您观察,AuditInfo 位于 'CustomFields' 标签下。谁能解释一下为什么在手动创建审计范围时将其置于 'CustomFields' 之下?

这已在最新的 Audit.NET.AzureCosmos 版本中修复。

问题:https://github.com/thepirat000/Audit.NET/issues/434

问题是因为 Audit.NET.AzureCosmos 库以前使用 Microsoft.Azure.DocumentDB.CoreNewtonsoft.Json 耦合,但是 Audit.NET 目标 .NET 5.0 使用 System.Text.Json,因此未考虑 JsonExtensionDataAuditEvent 所需的其他属性。

现在,当面向 .NET Standard 2.0 或 .NET 5.0 时,使用新的客户端库 Microsoft.Azure.Cosmos,并设置了自定义序列化程序,因此序列化由 [=19= 中的默认序列化机制处理]