我有一个Response.Redirect
在我的员工页面。 它重定向到工资页。
Response.Redirect ("Salary.aspx");
这是工作的罚款,直到我说的异常如下处理。
try
{
Response.Redirect ("Salary.aspx");
}
catch(Exception ex)
{
//MyLog();
throw new Exception();
}
//Remaining code in event handler
这引起了新的异常说“线程已被中止”,我才知道,这可以通过设置来避免endResponse
为假的重定向。
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();
新的异常的说明:它总是抛出异常,而是由框架处理。 自从我加入一条try..catch被抓住那里(和我举办了一个新的异常)
注: CompleteRequest
并绕过进一步HTTP过滤器和模块,但它不会在当前页面生命周期绕过其他事件
注:Response.Redirect的抛出此异常来结束当前页的处理。 ASP.NET的自己处理这个异常,并呼吁ResetAbort
继续处理。
题
- 无论是“设置endResponse为假”可以提高性能,因为没有抛出异常?
- 无论是“设置endResponse为假”,因为页面生命周期事件不会终止会降低性能?
陷阱
- 如果设置endResponse为
false
,在事件处理程序剩余部分的代码会被执行。 因此,我们需要做一个if
检查剩余的代码(检查:如果重定向标准未能实现)。
参考
- 为什么Response.Redirect的原因System.Threading.ThreadAbortException?
- ASP.NET例外“线程已被中止”导致方法退出