try.cat块内的Response.Redirect异常

时间:2013-07-02 04:24:05

标签: c# asp.net .net exception

说,我有一个try / catch块,它封装了一大块代码,然后在其中的某个地方,我需要调用Response.Redirect:

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引发异常,有关终止线程的事情,我认为这是该方法的“正常事件流”,但它会记录在我的{{1}中作为一个错误。所以我很好奇,有没有办法让LogExceptionAsError不抛出异常?

2 个答案:

答案 0 :(得分:4)

尝试使用替代版本的Response.Redirect

Response.Redirect(strMyNewURL, false);

它将终止当前页面加载。

答案 1 :(得分:2)

Response.Redirect完成当前执行的终止,从而通过抛出此异常来立即重定向,使其无法处理。这是故意的和设计的。在大多数情况下,你不应该自己捕捉它 - 它会破坏目的。如果您希望在重定向之前完成代码的执行,可以使用重载:

Response.Redirect(somewhere, false);

哪个不会引发异常。除非您需要在重定向之前执行其他操作,否则这可能效率低下。

请注意,这通常是一种反模式 - 通过异常抛出和捕获来控制逻辑流...但是这种特定方法有意义这样做,因为重定向通常不需要执行其他逻辑 - 只需响应一个302和要去的新地址。