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





0/5 (0投票)
在 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)
{
// 在此处编写实际的错误处理代码
}