响应.重定向try/catch块内的异常
本文关键字:异常 catch 重定向 try 响应 | 更新日期: 2023-09-27 18:20:49
比方说,我有一个try/catch块,它封装了一大块代码,然后在其中的某个地方我需要调用Response。重定向如下:
protected void ButtonGo_Click(object sender, EventArgs e)
{
try
{
using(lockingMethod)
{
//Code...
//Somewhere nested in the logic
Response.Redirect(strMyNewURL);
//More code...
}
}
catch(Exception ex)
{
LogExceptionAsError(ex);
}
}
在这种情况下,Response.Redirect
抛出一个异常,这是关于终止线程的,我认为这是该方法的"正常事件流",但它会作为错误记录在我的LogExceptionAsError
中。所以我很好奇,有没有办法让Response.Redirect
不抛出异常?
尝试使用Response.Redirect
的替代版本
Response.Redirect(strMyNewURL, false);
它将终止当前页面加载。
Response.Redirect
通过抛出此异常以使其不被处理来完成当前执行的终止,从而立即重定向。这是有意的,也是经过设计的。在大多数情况下,你不应该自己抓住它——它违背了目的。如果你想在重定向之前完成代码的执行,你可以使用重载:
Response.Redirect(somewhere, false);
这不会引发异常。这可能是低效的,除非你需要在重定向之前做其他事情。
请注意,这通常是通过异常抛出和捕获的反模式控制逻辑流。。。然而,这种特殊的方法这样做是有意义的,因为重定向通常不需要进一步的逻辑来执行-只需要用302和要去的新地址来响应。