Audit.NET e Asp Net Core Razor Pages
Estou usando páginas de navalha em meu aplicativo ASP.NET Core. Preciso habilitar o log com a biblioteca Audit.NET , funciona bem com controladores ASP.NET MVC, mas não funciona com páginas Razor.
Aqui está um exemplo de como declaro uma PageModelclasse com Auditatributo:
[Audit(EventTypeName = "{area}/{Page} ({verb})",
IncludeResponseBody = true,
IncludeRequestBody = true,
IncludeHeaders = true,
IncludeModel = true)]
public class LoginIndexModel : PageModel
{
...
}
Ele é acionado NullReferenceExceptionquando o AuditAttributefiltro de ação é invocado.
Aqui está o método declarado em AuditAttribute:
(Pelo que entendi o actionDescriptorparâmetro não pode ser convertido para 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>();
}
Então, o que posso fazer neste caso? Alguém encontrou um problema semelhante?
Respostas
O mecanismo de auditoria para MVC foi implementado com um filtro de ação, mas os filtros de ação não são suportados nas Páginas do Razor .
Para páginas do razor, um Filtro de página é fornecido em vez disso, para que você possa configurar a auditoria.
Use o fornecido em AuditPageFiltervez do [Audit]atributo.
Basicamente, você só precisa adicionar o filtro à coleção em sua lógica de inicialização, por exemplo:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddMvcOptions(options =>
{
options.Filters.Add(new Audit.Mvc.AuditPageFilter()
{
IncludeHeaders = true, ...
});
});
}
Verifique o leia-me aqui .