根据响应状态代码过滤请求 Audit.Net

问题描述

我想根据 ResponseCode 过滤请求,即不应使用 Audit.Net 记录具有 500、400、401 等响应状态代码的请求。 我使用了 AuditMiddleware,但它没有过滤 500、400 和 401 请求响应。

代码

 app.UseAuditMiddleware(_ => _
                .FilterByRequest(r => !r.Path.Value.EndsWith("favicon.ico") && r.HttpContext.Response.StatusCode==StatusCodes.Status200OK)
                .IncludeHeaders()
                .IncludeRequestBody()
                .IncludeResponseBody()
                .WithEventType("HTTP:{verb}:{url}"));

然后我在 StartUp.cs 的 ConfigureApp 方法调用它,但它没有过滤。

解决方法

FilterByRequest() 用作预过滤器,在操作执行之前被调用,因此您不会在过滤器委托上收到响应。

根据响应丢弃事件的选项是通过 custom action 进行后过滤,例如在您的启动时:

using Audit.WebApi;

Audit.Core.Configuration.AddCustomAction(ActionType.OnEventSaving,scope =>
{
    var ev = scope.GetWebApiAuditAction();
    if (ev?.ResponseStatusCode == 500 || ev?.ResponseStatusCode == 400)
    {
        scope.Discard();
    }
});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...