65.9K
CodeProject 正在变化。 阅读更多。
Home

在 Try...Catch 块中使用 Response.Redirect 和 Response.End

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 11 日

CPOL
viewsIcon

16212

在 Try...Catch 块中使用 Response.Redirect 和 Response.End 在 ASP.NET 中,如果你使用 Response.End - 用于终止页面执行,或者

在 Try...Catch 块中使用 Response.Redirect 和 Response.End

在 ASP.NET 中,如果你使用 Response.End - 用于终止页面执行,或者 Response.Redirect - 用于将页面重定向到另一个页面,并且你将这些语句包含在 TRY...CATCH 块中,你需要记住以下几点。

问题 

当 Response.Redirect 或 Response.End 写在 TRY 块中时,CATCH 块中的代码会被执行。

原因

ASP.NET 通过抛出 ThreadAbort 异常来执行 Response 对象上的这两个方法。当写在简单的 Try...Catch 块中时,这会导致 Catch 块捕获此异常并处理 Catch 块中编写的代码。这会导致不必要的代码执行,例如错误日志记录或通常在 Catch 块中编写的通用错误显示代码。

解决方案

你需要单独处理 ThreadAbort 异常,如果抛出该异常则什么也不做。请参考以下代码片段

try
{
                 // 你的实际代码

                Response.End();
}

catch
(ThreadAbortExceptionexc)
{
                 // 这应该是第一个 catch 块,即在通用 Exception 之前
                 // 这个 Catch 块用于吸收 Response.End 抛出的异常
}
catch (异常exc)
{
                // 在此处编写实际的错误处理代码
}

© . All rights reserved.