【问题标题】:ex = {Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}ex = {无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部。}
【发布时间】:2010-02-16 02:40:01
【问题描述】:

我知道,如果您将 Response.Redirect 放在 try-catch 中,除非您将重定向的第二个参数指定为 false,否则您将收到此错误。

但即使看这篇文章 (PRB: ThreadAbortException Occurs If You Use Response.End, Response.Redirect, or Server.Transfer),我仍然不明白为什么我必须为这行特定的代码将其设置为 false...在我包装它之前,我们一直对那个参数设置为 true在 try-catch 中:

Response.Redirect(SecureUrl("Confirmation", SessionID), true);

我们想关闭它,因为它是行尾......确认页面。但是,当它包含在 try-catch 中时,我得到了那个错误。我只是想更好地理解为什么是假的。我读了这篇文章,它并没有跳出来。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    如果你传递true作为第二个参数,它会抛出一个ThreadAbortException来停止处理请求。

    ASP.Net 内部的代码将捕获 ThreadAbortException,调用 Thread.ResetAbort,并发送 (HTTP 301) 响应。

    如果您有 catch 块,您还将看到 ThreadAbortException,就像您看到任何其他异常一样。

    最好的办法是在你的 catch 块之前为 ThreadAbortException 添加一个空的 catch 块,如下所示:

    } catch(ThreadAbortException) { throw; }
    

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多