C# ClearError()方法在应用程序_Error()中的奇怪行为?

C# ClearError()方法在应用程序_Error()中的奇怪行为?,c#,asp.net,C#,Asp.net,今天早些时候我试图回答这个问题,但我遇到了一些我无法解释的事情,所以这更多的是出于好奇,而不是出于需要 如果Global.asax文件中有此代码: protected void Application_Error(object sender, EventArgs e) { HttpContext.Current.ClearError(); Response.Redirect("CustomErrors.aspx", false); Context.ApplicationInst

今天早些时候我试图回答这个问题,但我遇到了一些我无法解释的事情,所以这更多的是出于好奇,而不是出于需要

如果Global.asax文件中有此代码:

protected void Application_Error(object sender, EventArgs e)
{
   HttpContext.Current.ClearError();
   Response.Redirect("CustomErrors.aspx", false);
   Context.ApplicationInstance.CompleteRequest();
}
然后在
Page\u Load()
方法中引发异常结果是
应用程序错误被调用两次,然后引发此异常:

发送HTTP标头后无法重定向

在按钮单击事件中引发相同的异常,会导致调用一次
Application\u Error
,并正确发生重定向

根据我的调查,如果删除
HttpContext.Current.ClearError()
,则从
Page\u Load()
和单击按钮两个方面都可以正常工作

我感到奇怪的是,为什么这种行为只发生在
Page\u Load()
中?使用按钮,在事件周期中,在它之前调用了click
Page\u Load()
,因此我知道为什么它会在周期的后面工作?在
页面加载()之后是否需要发生其他事件?还是最好不要尝试清除此(
应用程序错误
)方法中的错误