Внутри ASP.NET MVC: конвейер обработки запросов, часть первая (общий вид)

В данной вводной статье показан визуальный общий вид механизма обработки запроса в ASP.NET MVC. Процесс показан подробно и позволяет получить достаточно полное представление о том, что происходит на самом деле "под капотом".

Рисунок получился плохого качества. Но вот ссылка на pdf файл высокого качества. В следующих разделах рассмотрим каждый блок более детально, продолжение следует...
Андрей
24.11.2012 19:18
Спасибо! Более подробной схемы пока не встречал.
Vyacheslav
02.12.2012 18:00
Спасибо. Все прекрасно, но цвета можно было сделать менее вырвиглазными ))
SSSR
13.09.2013 18:21
Подскажите, пожалуйста, относительно маршрутизации ASP.NET MVC, а именно метода IgnoreRoute(). Если я правильно понял, то данный метод просто предотвращает сравнивание указанного в нем шаблона URL с существующими в приложении маршрутами (т.е. не определяет какой контроллер и экшен должен обрабатывать соответствующий шаблону запрос, а просто обрабатывает запрос как есть)?

Т.е., если рассматривать пример ниже, то не смотря на то что включена проверка маршрутов перед дисковыми файлами, запрос вида МойСайт/Content­/страница.html вернет статический файл страница.html и не будет искать для данного URL соответствующий ему шаблон маршрута (то бишь контроллер и экшен который должен обработать это запрос)

routes.RouteExistingFiles = true;

routes.IgnoreRoute("Content/{filename}.html");


Я правильно все понял?
13.09.2013 19:50
Да, вы всё правильно поняли. Вы включаете маршрутизацию для обработки всех запросов, а потом исключаете опредлённые узлы.
SSSR
18.09.2013 19:11
Спасибо за ответ.

Возникли некоторые вопросы уже касательно генерации исходящих URL. Подскажите, пожалуйста, по ним.

Суть вопроса такова (пример взят из книги):

Имеем в приложении один единственный маршрут.
routes.MapRoute("", "{controller}/{action}/{color}/{page}");

И пользователя находящегося в URL: /Catalog/List/P­urple/123

Далее с помощью ActionLink() создаем ссылку:
@Html.ActionLink("Click me", "List", "Catalog", new { page = 789 }, null)

В результате своей работы метод ActionLink() вернет
<a href="/Catalog/List/Purple/789">Click me</a>


Идем дальше... и снова генерируем с помощью ActionLink() ссылку (при этом пользователь все так же находится на указанном выше URL), но передаем уже в метод анонимный объект с значением для переменной color:

@Html.ActionLink("Click me", "List", "Catalog", new { color = "Green" }, null)

В результате своей рабоыт ActionLink() уже вернет пустую ссылку, т.е.
<a href="">Click me</a>



Сам вопрос:

Почему в первом случае (когда было передано { page = 789 }), метод ActionLink() смог взять из строки URL недостающее значение для переменной color, а во втором (когда было передано { color = "Green" }) для переменной page такого не произошло и метод сгенерировал пустую ссылку?
19.09.2013 10:07
Странно, пустой ссылки там быть не должно. Вопросы которые не напрямую относятся к статьям, лучше задавайте на форуме. Постараюсь там ответить. И этот в том числе.