我的员工页面中有一个Response.Redirect
。它重定向到薪水页面。
Response.Redirect ("Salary.aspx");
在我添加如下异常处理之前,它工作正常。
try
{
Response.Redirect ("Salary.aspx");
}
catch(Exception ex)
{
//MyLog();
throw new Exception();
}
//Remaining code in event handler
这导致了一个新的异常,说“线程被中止”。我开始知道可以通过将endResponse
重定向设置为 false 来避免这种情况。
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();
新异常的解释:它总是抛出异常但由框架处理。因为我添加了一个 try..catch 它被捕获在那里(我抛出一个新的异常)
注意:CompleteRequest
会绕过更多的 HTTP 过滤器和模块,但不会绕过当前页面生命周期中的更多事件
注意: Response.Redirect 抛出此异常以结束当前页面的处理。ASP .Net 本身处理此异常并调用ResetAbort
以继续处理。
问题
- 由于不抛出异常,“将 endResponse 设置为 false”是否可以提高性能?
- 由于页面生命周期事件未终止,“将 endResponse 设置为 false”是否会降低性能?
陷阱
- 如果将 endResponse 设置为
false
,则将执行事件处理程序中的剩余代码。所以我们需要if
检查剩余的代码(检查:是否不满足重定向条件)。
参考