我使用一个很棒的库在ASP.NET core 3.1应用程序中实现了审计跟踪,这个库也有非常好的文档:https://github.com/thepirat000/Audit.NET/blob/master/src/Audit.WebApi/README.md

我已经用推荐的方法在ASP.NET core 3.1 Web API项目中实现了它:中间件+操作筛选器(ASP.NET核心):将审核中间件与全局操作筛选器(或本地操作筛选器)一起添加.在这个实现中,我使用AzureStorageTableDataProvider(https://github.com/thepirat000/Audit.NET/tree/master/src/Audit.NET.AzureStorageTables)来存储审计事件.

Audit.Core.Configuration.Setup()
    .UseAzureTableStorage(config => config
        .Endpoint(new Uri(Settings.TableEndpointUrl))
        .TableName(Settings.TableName)
        .ClientOptions(new TableClientOptions() { Retry = { MaxRetries = 66 } })
        .EntityBuilder(builder => builder
            .PartitionKey(auditEvent => auditEvent.EventType)
            .RowKey(auditEvent => Guid.NewGuid().ToString("N"))
            .Columns(col => col
                .FromDictionary(auditEvent => new Dictionary<string, object>()
                {
                    { "EventType", auditEvent.EventType },
                    { "UserName", auditEvent.Environment.UserName },
                    { "EventDuration", auditEvent.Duration },
                    { "Data", auditEvent.ToJson() }
                }))));

上面的代码是从Startup.cs的配置方法调用的.只有在应用程序启动时才会调用此代码,从那时起,中间件将拦截并存储所有请求.在上面的代码中,如果在启动时不存在一个表,那么只会创建一个表,并且从那里开始使用同一个表来存储数据.在我的例子中,我希望按月创建一个表(例如,AuditTrailJAN2024、AuditTrailFEB2024).我创建了一个方法:GetTableName(),它动态返回表名,并更新了上面的代码.TableName(GetTableName()),但这对我不起作用,因为上面的逻辑是第一次调用,随后每当应用程序重新启动时都会调用.

有没有人能帮我提供一些代码样本,作为我的实现的参考

推荐答案

看起来你打错了TableName()的超载电话.如果你需要你的表名是动态的,你必须使用TableName(Func<AuditEvent, string>)重载.

例如:

     .TableName(ev => GetTableName())

Csharp相关问答推荐

MongoDB实体框架核心:表达必须可写

Plotly.NET访问互联网时出现异常

AutoMapper -如何为两个不同的用例设置单个映射?

C++/C#HostFXR通过std::tuple传递参数

如何使用XmlSerializer反序列化字符串数组?

为什么将鼠标悬停在DateTimeOffset上只显示Hour值?

如何注册类使用多级继承与接口

System.Text.Json .NET 8多形态语法化

如何在NET 8最小API中自动记录TypedResults.Stream响应

在try 使用访问服务器上的文件夹时,如何解决CORS错误.NET核心API

在DoubleClick上交换DataGridViewImageColumn的图像和工具提示

数据库.Migrate在对接容器重启时失败

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

将C#类导入到PowerShell

如何在单击按钮后多次异步更新标签

删除MudRadio时,MudRadioGroup未 Select 正确的MudRadio

客户端/服务器RPC如何处理全局变量?

自定义ConsoleForMatter中的DI/Http上下文

部署Aspnet Blazor服务器时出现未处理的Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]异常

C#11/.NET 7-判断&t;值类型>;后的可为空性行为