2009-10-19 2 views
3

Что произойдет в следующем сценарии? Будет ли он работать после response.redirect?response.redirect и throw in catch block

Или мне нужно использовать Response.Redirect в уловов блоке основного способа, в котором оно проливает стек вызовов исключение ....

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

Почему бы вам не попробовать? Интересный вопрос, хотя. –

ответ

7

Поскольку вы не питая параметр, чтобы указать, является ли текущей страницы должен продолжить выполнение, он автоматически завершает страницу, вызывая End(). Использование метода с одним параметром совпадает с вызовом метода с двумя параметрами, при этом второй (endResponse) устанавливается на true. Поскольку End() приводит к тому, что генерируется исключение, оно никогда не достигнет вашего утверждения throw.

Ссылка: http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

При использовании этого метода в обработчике страницы прекратить запрос на одну страницу и начать новый запрос на другую страницу, установите endResponse к истинному или вызвать редирект метод перегрузки. Этот метод вызывает End для исходного запроса , который выдает исключение ThreadAbortException по завершении .

Если вы хотите, чтобы страница продолжалась, вам необходимо использовать подпись с двумя параметрами и установить параметр endResponse на false.

3

Если вы вызываете Response.Redirect (без перегрузки), то он должен немедленно прекратить выполнение, и поэтому бросок не будет поднят.

Однако, если вы используете перегрузку и передаете false, например. Response.Redirect("Error.aspx", false), то он продолжит выполнение страницы, а затем перенаправит.

(По крайней мере, это мое понимание от the documentation).