问题描述
我想根据 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();
}
});