response.redirect并抛入catch块

时间:2009-10-19 21:52:35

标签: c# asp.net try-catch

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

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

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

2 个答案:

答案 0 :(得分:7)

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

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

  

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

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

答案 1 :(得分:3)

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

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

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