【问题标题】:response.redirect and throw in catch blockresponse.redirect 并抛出 catch 块
【发布时间】:2009-10-19 21:52:34
【问题描述】:

在以下情况下会发生什么?在 response.redirect 之后它会抛出工作吗?

或者我是否需要在 main 方法的 catch 块中使用 Response.Redirect,它会抛出异常调用堆栈......

try
{    
//code
}
catch(Exception ex)
{    
Response.Redirect("Error.aspx");
throw;    
}

【问题讨论】:

  • 你为什么不试试呢?不过很有趣的问题。

标签: c# asp.net try-catch


【解决方案1】:

由于您没有提供参数来指示当前页面是否应该继续执行,它会通过调用 End() 自动终止页面。使用带有单个参数的方法与调用带有两个参数的方法相同,第二个(endResponse)设置为true。由于 End() 导致抛出异常,因此它永远不会到达您的 throw 语句。

参考:http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

当您在页面中使用此方法时 处理程序终止一个请求 页面并开始一个新的请求 另一个页面,将 endResponse 设置为 true 或调用 Redirect 方法重载。 此方法为原始调用 End 请求,它抛出一个 ThreadAbortException 异常 完成。

如果您希望页面继续执行,您需要使用带有两个参数的签名并将 endResponse 参数设置为false

【讨论】:

    【解决方案2】:

    如果您调用 Response.Redirect(没有重载),那么它应该立即停止执行,因此不会引发 throw。

    但是,如果您使用重载并传入 false,例如。 Response.Redirect("Error.aspx", false) 然后它会继续执行页面然后重定向。

    (至少,这是我对the documentation)的理解。

    【讨论】:

      猜你喜欢
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 1970-01-01
      相关资源
      最近更新 更多