MS.ASP.NET

15 июн 04, 02:15
Особенности Response.Redirect

Любопытная информация по поводу Response.Redirect... Следующий код

Try
' Do anything here
Response.Redirect("http://www.microsoft.com")
Catch ex As Exception
Session("error") = ex.message
Response.Redirect("errors.aspx")
End Try

всегда (!) вызовет зайдет в Catch потому что "Redirect calls End which raises a ThreadAbortException exception upon completion", что означает, что выполнение самого редиректа посредине кода вызовет исключение ThreadAbortException.

Классно? :-)

Решение проблемы с исключением может быть таким

Try
Response.Redirect("http://www.microsoft.com")
Catch ex As System.Threading.ThreadAbortException ' Do nothing; redirect will jump to desired target.
Catch ex As Exception
Session("error") = ex.message
Response.Redirect("errors.aspx")
End Try

где как видно ThreadAbortException специально отлавливается

либо

Response.Redirect("http://www.microsoft.com", false)

где используется false, чтобы после редиректа (!) продолжать выполнять код исходной страницы. Бояться того, что исходная страница будет отображена не надо, редирект будет все равно выполнен, но продолжение выполнения кода может без надобности нагрузить сервер, так что первый метод отлова исключения предпочтителен.

Комментарии



Добавить комментарий
  • Об этом дневнике 

  • Мой дневник:
  • Создать/изменить дневник
  • Добавить запись
  • Посмотреть комментарии