UPDATE
Причина, по которой это происходит, заключается в том, что, когда изображение указано в файле CSS, и это изображение отсутствует, структура маршрутизации пытается сопоставить URL-адрес с контроллером. Игнорирование маршрутов, перечисленных ниже, предотвратит возникновение ошибки, но я решил не реализовывать ее, потому что это хороший способ уведомления о наличии недостающего ресурса.
Подробное объяснение вы можете увидеть вместе с примерами настройки внедрения зависимостей с использованием Структурной карты здесь .
У меня была та же самая проблема, и я думаю, что я понял это. По любой причине, когда вы пытаетесь предоставить свою собственную фабрику контроллеров, вам необходимо добавить пару дополнительных определений IgnoreRoute. Первое, что я хотел бы сделать, это добавить эту строку в ваш метод GetControllerInstance:
if(controllerType == null)
return base.GetControllerInstance(controllerType)
Это, по крайней мере, даст вам больше информации в сообщении об ошибке относительно того, что запрос является причиной, что controllerType имеет значение null. В моем конкретном случае в моем css-файле было задано следующее фоновое изображение:
background: url(img/logo.gif);
Итак, что происходит, когда маршрутизация ищет контроллер под названием «img» и действие, которое принимает logo.gif или что-то в этом роде. Это явно не правильное поведение.
После некоторого копания я понял, что мне нужно добавить определение IgnoreRoute в мой файл Global.asax, которое будет игнорировать что-либо в каталоге «content» моего сайта, например:
routes.IgnoreRoute("{Content}/{*pathInfo}");
Я все еще не уверен, почему вам не нужно делать это с фабрикой ControllerFactory по умолчанию, но тем не менее это работает.
Возможно, вы столкнетесь с той же проблемой с favicon.ico. Особенно, если вы используете Google crhome. Вам также нужно добавить это:
routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"})