Audit.NET e Asp Net Core Razor Pages
Sto usando pagine Razor nella mia applicazione ASP.NET Core. Devo abilitare la registrazione con la libreria Audit.NET , funziona bene con i controller ASP.NET MVC, ma non funziona con le pagine Razor.
Ecco un esempio di come dichiaro una PageModelclasse con Auditattributo:
[Audit(EventTypeName = "{area}/{Page} ({verb})",
IncludeResponseBody = true,
IncludeRequestBody = true,
IncludeHeaders = true,
IncludeModel = true)]
public class LoginIndexModel : PageModel
{
...
}
Viene generato NullReferenceExceptionquando AuditAttributeviene richiamato il filtro di azione.
Ecco il metodo dichiarato in AuditAttribute:
(A quanto ho capito actionDescriptornon è possibile eseguire il cast del parametro 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>();
}
Allora cosa posso fare in questo caso? Qualcuno ha riscontrato un problema simile?
Risposte
Il meccanismo di controllo per MVC è stato implementato con un filtro di azione, ma i filtri di azione non sono supportati in Razor Pages .
Per le pagine Razor, viene invece fornito un filtro pagina , in modo da poter configurare il controllo.
Utilizza AuditPageFilterl' [Audit]attributo fornito anziché l' attributo.
Fondamentalmente devi solo aggiungere il filtro alla raccolta sulla tua logica di avvio, ad esempio:
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages()
.AddMvcOptions(options =>
{
options.Filters.Add(new Audit.Mvc.AuditPageFilter()
{
IncludeHeaders = true, ...
});
});
}
Controlla il file readme qui .