Ответ 1
Мои 2 цента: Маршрут не является регулярным выражением. Это просто переменные и статические компоненты, которые составляют маршрут, разделенный сегментами (обозначается косой чертой). Там один специальный символ, звездочка в последней переменной, что означает здесь, игнорирует разделитель сегментов - косую черту. Итак,
{*url}
- самый простой маршрут, потому что он означает весь URL-адрес, помещает его в переменную 'url' и передает это на страницу, связанную с этим маршрутом.
{controller}/{action}/{id}
помещает все в первый сегмент - вплоть до первой косой черты - в переменную 'controller', помещает все между первой и второй/в переменную 'action', и все между вторым и третьим косой чертой (или конец) в переменную 'id'. эти переменные затем передаются на связанную страницу.
{resource}.axd/{*pathInfo}
здесь, поместите информацию до .axd/(и не может иметь никаких слэшей!) в "ресурс" и поместите все после первого/в "pathInfo". Поскольку это, как правило, ignoreRoute, поэтому вместо того, чтобы передавать его на связанную страницу, он обрабатывается StopHandler, что означает, что маршрутизация не будет работать с ним, а вместо этого обрабатывается немаршрутизатором HttpHandler.
Как говорит bleevo, маршруты выполняются, чтобы они были добавлены в коллекцию. поэтому IgnoreRoute необходимо добавить до того, как обрабатывается общий маршрут.
Здесь устье лошади: http://msdn.microsoft.com/en-us/library/cc668201.aspx
Конкретный для вашего примера, я бы поместил строки IgnoreRoute над добавлением Route, потому что ваш маршрут фактически является уловкой. Кроме того, помните, что игнорирование .gif будет выполнено только в том случае, если gif находится в корневом каталоге.