Response.Redirect异常

Ted*_*sen 6 asp.net

执行行:

Response.Redirect("Whateva.aspx", true);
Run Code Online (Sandbox Code Playgroud)

结果是:

A first chance exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll
An exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll but was not handled in user code

例外是由于"真实"部分,告诉它立即结束当前请求.

这应该是怎么回事?
如果我们考虑:

  • 通常认为异常很重,很多时候提前结束请求的原因是避免处理页面的其余部分.
  • 性能监视中会出现异常,因此监视解决方案将显示错误数量的异常.

有没有其他方法来实现相同的目标?

vol*_*pav 6

关于开发人员应该避免引发(和捕获)异常这一事实是正确的,因为执行运行时会消耗时间和内存以收集有关特定异常的信息.相反,他(或她)应该不让它们发生(当它可能时).

关于Response.Redirect:此行为是"按设计",但您可能希望使用众所周知的解决方法.请阅读此知识库文章.

- 帕维尔


Dav*_*vid 6

我在这种情况下通常采用的一种方法是在响应期间不结束响应,而是立即使用return(或其他流控制)跟踪响应.像这样的东西:

Response.Redirect("Whateva.aspx", false);
return;
Run Code Online (Sandbox Code Playgroud)

当然,这取决于重定向在逻辑流程中发生的位置.但是你想要处理它很好.但是这个想法是,当你想要在重定向上结束响应时,那么通过a退出有问题的方法return并不是不可能的.

我看到人们常常采用一种方法来解决这个问题,不应该说这是应该避免的,但为了完整起见我还是会说出来(你永远不会知道谁可能会在以后通过Google偶然发现这个问题) ,等等,是捕捉和吞下例外:

try
{
    Response.Redirect("Whateva.aspx", true);
}
catch (Exception ex)
{
    // do nothing
}
Run Code Online (Sandbox Code Playgroud)

当然,出于多种原因,应该这样做.正如我从你对异常的描述中推断的那样,你无疑已经知道这将是不好的做法.但是,正如我所说,在答案中值得注意这一事实.