退后一步,我正在学习ASP.NET错误处理,我特意看了这篇文章:https://docs.microsoft.com/en-us/aspnet/web-forms/overview/getting-started/getting-started-with-aspnet-45-web-forms/aspnet-error-handling
我已经下载了他们的WingtipToys项目。
这导致我执行以下操作(Visual Studio 2013,.NET 4.5):
新项目 - ASP.NET Web应用程序(我将其命名为EmptyWebApp)。
一个。在本向导的下一个屏幕上,我选择了Empty,对于Add files和core references,我确保Web Forms,MVC,Web API都未经检查。
添加了一个新的Web表单(名为WebForm1)。
.cs中的代码如下所示:
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
throw new Exception("foo");
}
}
.cs中的代码如下所示:
public partial class ErrorPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Server.ClearError();
}
}
代码的唯一功能是:
protected void Application_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
Server.Transfer("ErrorPage.aspx");
}
(是的,exc现在什么也没做,但我打算使用它。)
当我编译并运行时(在ErrorPage中的Server.Transfer和Server.ClearError上使用断点),我注意到断点被命中两次。
它执行以下操作:
a. Server.Transfer (in Application_Error)
b. Server.ClearError (in Page_Load of ErrorPage)
c. Server.Transfer (in Application_Error)
d. Server.ClearError (in Page_Load of ErrorPage)
所以,它被转移了两次,而页面加载了两次。
我第一次到达Server.Transfer断点(a。)时,exc有一个值。 第二次到达Server.Transfer断点(c。),exc为null。
注释掉Server.ClearError,它不会加载两次。
在Server.Transfer之后立即放置Server.ClearError,我们再次加载两次。
删除Server.Transfer(在Application_Error中)并保留Server.ClearError(),并执行一次。
因此,Sever.Transfer和Server.ClearError的某些组合导致了这种情况。
但是,当我运行WingTipToys项目时,他们的Page_Load中有一个Server.ClearError,并且它不会导致Application_Error执行两次。我的意思是,如果它正在执行两次,是否会发生一些错误(我无法解释)?
我认为这不是什么大问题,但它让我停下来,我的简单项目表现出不同的运行时行为。
谢谢!