使用 ADFS 时在 ELMAH 中丢失用户信息
Losing USER information in ELMAH when using ADFS
我有一个使用 ELMAH 记录未处理异常的 MVC Web 应用程序。我现在正从 windows 身份验证转向 ADFS 身份验证。该应用程序已经过调整并且运行良好。但是现在当我检查错误时,用户信息不再存在。这是有道理的,因为 ELMAH 使用上下文标识而不是声明来检索此信息。你们有人知道我该怎么做才能再次记录这些信息吗?
如果你能接受一个小 hack,你可以 enrich ELMAH errors using error filtering hook。总之,需要在Global.asax.cs
文件中实现ErrorLog_Filtering
方法:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
{
var httpContext = args.Context as HttpContext;
if (httpContext != null)
{
var error = new Error(args.Exception, httpContext);
error.User = GetUserFromDatabase();
ErrorLog.GetDefault(httpContext).Log(error);
args.Dismiss();
}
}
在示例中,我使用虚拟方法的值更新了 User
属性。您希望如何实现这一点取决于您如何从 ADFS 获取当前登录的用户。最后,我再次记录错误并消除初始(无用户)错误。
我有一个使用 ELMAH 记录未处理异常的 MVC Web 应用程序。我现在正从 windows 身份验证转向 ADFS 身份验证。该应用程序已经过调整并且运行良好。但是现在当我检查错误时,用户信息不再存在。这是有道理的,因为 ELMAH 使用上下文标识而不是声明来检索此信息。你们有人知道我该怎么做才能再次记录这些信息吗?
如果你能接受一个小 hack,你可以 enrich ELMAH errors using error filtering hook。总之,需要在Global.asax.cs
文件中实现ErrorLog_Filtering
方法:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args)
{
var httpContext = args.Context as HttpContext;
if (httpContext != null)
{
var error = new Error(args.Exception, httpContext);
error.User = GetUserFromDatabase();
ErrorLog.GetDefault(httpContext).Log(error);
args.Dismiss();
}
}
在示例中,我使用虚拟方法的值更新了 User
属性。您希望如何实现这一点取决于您如何从 ADFS 获取当前登录的用户。最后,我再次记录错误并消除初始(无用户)错误。