Pull to refresh

C#: Этюды, часть 3

Reading time2 min
Views1.5K
В предыдущей части было предложено три разных по своей сути решения.

Сегодня — новая загадка, из области ASP.NET. Её основное отличие от предыдущих в том, что я столкнулся с ней в реальной ситуации, и пришлось потратить время, чтобы разобраться, в чем же дело.

Итак, на странице Test.aspx имеется код:



protected void Page_Load(object sender, EventArgs e)<br>{<br>  try<br>  {<br>    if (object.ReferenceEquals(Request["ID"], "aaa"))<br>    {<br>      Response.Redirect("~/PageA.aspx");<br>    }<br>    else if (Request["ID"] == "bbb")<br>    {<br>      Response.Redirect("~/PageB.aspx");<br>    }<br>    else<br>    {<br>      int i = int.Parse(Request["ID"]);<br>      object boxedI = i;<br>      if ((i > 5) && ((long)boxedI == 10))<br>      {<br>        Response.Redirect("~/Page10.aspx");<br>      }<br>      Response.Redirect("~/PageDafault.aspx");<br>    }<br>  }      <br>  catch (Exception)<br>  {<br>    Response.Redirect("~/Error.aspx");<br>  }<br>}<br><br>* This source code was highlighted with Source Code Highlighter.

Также имеются четыре ссылки:
  1. Test.aspx?ID=aaa
  2. Test.aspx?ID=bbb
  3. Test.aspx?ID=4
  4. Test.aspx?ID=10


UPD Итак, правильные ответы:
Вопрос на «тройку»: куда приведет каждая из них? >>>Любая ссылка приведет на Error.aspx<<<

Вопрос на «четверку»: почему именно так? >>>Response.Redirect прерывает поток выполнения кода страницы, бросая для этого ThreadAbortException. catch(Exception) ловит его, бросая опять в Response.Redirect, но направляя при этом на другую страницу<<<

Вопрос на «пятерку»: как Вы предлагаете исправить ситуацию? >>>Больше всего мне понравился способ wdk: просто перехватить нужный тип исключения перед catch(Exception): habrahabr.ru/blogs/net/77154/#comment_2246114 Несмотря на всю простоту этого кода он делает именно то, что нужно: прерывает выполнение кода страницы. Поскольку исключение ThreadAbortException регенерируется в конце блока catch, это не приведет к выполнению ненужного кода за пределами блока try и в других событиях страницы. А решение habrahabr.ru/blogs/net/77154/#comment_2245598 как раз приводит к такому выполнению, поэтому мне и не нравится<<<

Похоже, выбранный мной формат загадок не совсем подходит для блога .NET, поэтому ищите следующие загадки у меня в блоге :)

Спасибо всем!
Tags:
Hubs:
Total votes 61: ↑34 and ↓27+7
Comments76

Articles