C# 如何在页面卸载中检测是否已发生未处理的异常?
即使发生未处理的异常,也会调用Page_Unload。我需要处理这种情况 我有一个变量状态验证,当变量在Page_Unload中的状态不正确时引发异常。该异常稍后由C# 如何在页面卸载中检测是否已发生未处理的异常?,c#,asp.net,error-handling,global-asax,C#,Asp.net,Error Handling,Global Asax,即使发生未处理的异常,也会调用Page_Unload。我需要处理这种情况 我有一个变量状态验证,当变量在Page_Unload中的状态不正确时引发异常。该异常稍后由Global.asax中的Application\u Error处理。当另一个异常已经发生时,我需要禁止抛出异常 页面: public partial class _Default : System.Web.UI.Page { private int tst = 0; protected void Page_Load(
Global.asax
中的Application\u Error
处理。当另一个异常已经发生时,我需要禁止抛出异常
页面:
public partial class _Default : System.Web.UI.Page
{
private int tst = 0;
protected void Page_Load(object sender, EventArgs e)
{
tst = tst / tst; //causes "Attempted to divide by zero."
tst = 1;
}
protected void Page_Unload(object sender, EventArgs e)
{
if (tst == 0) throw new Exception("Exception on unload");
}
}
Global.asax:
void Application_Error(object sender, EventArgs e)
{
// Get the error details
Exception lastErrorWrapper = Server.GetLastError();
System.Diagnostics.Debug.Print(lastErrorWrapper.Message);
}
我需要在Global.asax
中得到“试图除以零”,但我得到的是“卸载时异常”
给出的例子大大简化了。实际情况包括用户控件和条件编译
我不允许在
页面加载中解决这种情况(例如通过捕获异常)。为什么不这样使用global.asax方法
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
// Get the error details
Exception lastErrorWrapper = Server.GetLastError();
System.Diagnostics.Debug.Print(lastErrorWrapper.Message);
Response.Redirect("~/error.aspx?q=" + lastErrorWrapper.Message);
}
那么它不会在这里显示错误,备选方案是:
在web.config中设置自定义错误页
<customErrors mode="On" defaultRedirect="mypage.aspx">
</customErrors>
关于我在实际应用中就是这样使用它的。给出的代码只是一个简化的示例。但这并不能解决问题——获取的消息与抛出的消息不同。因此,需要一个更好的示例,最好是使用控件和实际数据/异常@Ivanht。问题要么是抑制页面卸载中的抛出,要么是以某种方式在应用程序错误中获取“前一个异常”。发生的异常未知。如果我知道异常,我会阻止它,而不是显示它。好吧,也许这对你有帮助,另外你是否需要page_unload方法,因为如果是这样的话,你就不会得到“异常原因”,该方法将始终运行,并将重置你从load方法得到的任何异常,如果不使用它,可以在lastErrorWrapper.InnerException中看到异常。希望这能帮助你@IvanHI编辑你的标题。请参阅“”,其中的共识是“不,他们不应该”。