Audit.NET 和 Asp Net Core Razor 页面

Audit.NET and Asp Net Core Razor Pages

我在 ASP.NET 核心应用程序中使用剃刀页面。我需要使用 Audit.NET library 启用日志记录,它适用于 ASP.NET MVC 控制器,但不适用于 Razor 页面。

这是一个示例,我如何使用 Audit 属性声明 PageModel class:

[Audit(EventTypeName = "{area}/{Page} ({verb})",
   IncludeResponseBody = true,
   IncludeRequestBody = true,
   IncludeHeaders = true,
   IncludeModel = true)]
public class LoginIndexModel : PageModel
{
  ...
}

当调用 AuditAttribute 操作过滤器时抛出 NullReferenceException

这里是在AuditAttribute中声明的方法:
(据我了解 actionDescriptor 参数不能转换为 ControllerActionDescriptor

private bool IsActionIgnored(ActionDescriptor actionDescriptor)
{
    if (actionDescriptor == null)
        return false;

    return ((IEnumerable<object>)(actionDescriptor as ControllerActionDescriptor).ControllerTypeInfo
               .GetCustomAttributes(typeof(AuditIgnoreAttribute), true)).Any<object>() || 
           ((IEnumerable<object>)(actionDescriptor as ControllerActionDescriptor).MethodInfo
               .GetCustomAttributes(typeof(AuditIgnoreAttribute), true)).Any<object>();
}

那么在这种情况下我能做什么呢? 有没有人遇到过类似的问题?

MVC 的审核机制是通过操作过滤器实现的,但操作过滤器是 not supported on Razor Pages

对于 razor 页面,提供了 Page Filter,因此您可以配置审核。

使用提供的 AuditPageFilter 而不是 [Audit] 属性。

基本上你只需要将过滤器添加到启动逻辑的集合中,例如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages()
        .AddMvcOptions(options =>
        {
            options.Filters.Add(new Audit.Mvc.AuditPageFilter()
            {
                IncludeHeaders = true, ...
            });
        });
}

查看自述文件 here