我使用此过滤器在Elmah中记录HttpRequestValidationException:
public class ElmahRequestValidationErrorFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
if (context.Exception is HttpRequestValidationException)
Elmah.ErrorSignal.FromCurrentContext().Raise(context.Exception.InnerException);
}
}
我在FilterConfig.cs中注册了这个过滤器:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ElmahRequestValidationErrorFilter());
filters.Add(new HandleErrorAttribute());
}
}
但是当发生此错误时,经过身份验证的用户的UserName不会保存在用户列的elmah日志中。但在其他错误中,它的剂量工作正常。 我该如何解决这个问题?
答案 0 :(得分:0)
用户列是空的,因为Elmah从
获取用户名Thread.CurrentPrincipal.Identity.Name
您可以在Elmah记录错误之前设置当前用户。
try
{
}
catch(Exception ex)
{
string userName = "username1";
string[] roles = { "" };
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles);
ErrorSignal.FromCurrentContext().Raise(ex);
}