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。
我在 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。