使用 Audit.Net.MongoDB 时的问题

Posted

技术标签:

【中文标题】使用 Audit.Net.MongoDB 时的问题【英文标题】:Issue while using Audit.Net.MongoDB 【发布时间】:2020-08-14 09:33:50 【问题描述】:

我正在使用 Audit.Net 包来审核我的应用程序的要求。 https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.NET.MongoDB#auditnetmongodb

当我尝试使用 AuditScope.Create 方法时,我遇到了 JSON 序列化异常。附件是我得到的例外。我错过了什么?

下面是 UserProfiles 类:

    public class UserProfiles
    
        [BsonId]
        public ObjectId Id  get; set; 
        public int UserId  get; set; 
        [BsonRequired]
        public string UserName  get; set; 
        [BsonRequired]
        public string Password  get; set; 
        public string Role  get; set; 
        [BsonRequired]
        public string Email  get; set; 
        [BsonRequired]
        public string ProjectId  get; set; 
    

Startup.cs 文件:下面是使用的代码:

public Startup(IConfiguration configuration)
        
            Configuration = configuration;
            Audit.Core.Configuration.DataProvider = new Audit.MongoDB.Providers.MongoDataProvider()
            
                ConnectionString = "mongodb://localhost:27017",
                Database = "Audit",
                Collection = "Event"
            ;
        

我也尝试将 dataprovider 配置移至 ConfigureServices 方法。我犯了同样的错误。我有什么遗漏吗?

谢谢, 瓦尼

【问题讨论】:

你能分享UserProfiles类代码吗?您是否将任何属性声明为ObjectId 还想知道this 是否可以解决您的问题(创建JsonConverter 并覆盖MongoDataProvider.JsonSerializerSettings 属性) @thepirat000:是的 UserProfiles 类有 ObjectId 属性。 【参考方案1】:

问题是ObjectId 无法使用目标对象的默认序列化程序序列化/反序列化为 Json。

最新版本的Mongo Data Provider 包含一个设置SerializeAsBson,您应该将其设置为true,这样您的目标对象就会被序列化为Bson 文档。

Audit.Core.Configuration.DataProvider = new Audit.MongoDB.Providers.MongoDataProvider()

    ConnectionString = "mongodb://localhost:27017",
    Database = "Audit",
    Collection = "Event",
    SerializeAsBson = true
;

【讨论】:

以上是关于使用 Audit.Net.MongoDB 时的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ninject BindHttpFilter 时的范围问题

使用分段模型库时的问题

使用 doParallel 时的范围问题

使用域名浏览时的 Ajax 问题

使用 RestTemplate 发送请求时的编码问题

使用 python setuptools 库时的导入问题