我的员工页面中有一个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
,则将执行事件处理程序中的剩余代码。因此,我们需要检查剩余代码(检查:是否满足重定向条件)。
参考资料
Response.Redirect
抛出异常会导致性能问题,那么你可能是过早地进行了优化。 - Matthew