ASP .NET:当customErrors包含redirectMode =“ResponseRewrite”时,Thread.CurrentPrincipal丢失

时间:2010-09-22 18:53:58

标签: asp.net custom-errors

我在其中一个处理Authentication_Request的模块中设置了自定义主体。然后我将它设置为HttpContext.User。这设置了我的HttpContext.User和Thread.CurrentPrincipal。现在当发生错误并且customErrors部分包含“ResponseRewrite”时,Thread.CurrentPrincipal将重置为我的ASPX错误页面上的通用主体。但是我的HttpContext.User仍然包含我的自定义主体。如果customErrors部分包含“ResponseRedirect”,则不会发生这种情况。这是预期的行为吗?

1 个答案:

答案 0 :(得分:0)

我怀疑服务器正在启动一个单独的线程来执行错误页面。您可以通过将以下内容放入Global.asax来重置它(Thread.CurrentPrincipal)。

  protected void Application_AuthenticateRequest(object sender, EventArgs e) {
        Thread.CurrentPrincipal = HttpContext.Current.User;
  }

此行将确保两个请求同步到您的应用程序。