Подтвердить что ты не робот

Я получаю сообщение об ошибке "Не реализует IController" на изображениях и файле robots.txt в MVC2

Я получаю странную ошибку на моем веб-сервере для кажущегося каждого файла, но файлов .aspx.

Вот пример. Просто замените '/robots.txt' на любое .jpg имя или .gif или что угодно, и вы получите идею:

Контроллер для пути '/robots.txt' не найден или не реализуется IController.

Я уверен, что это связано с тем, как я настраивал маршрутизацию, но я не уверен, что именно мне нужно сделать.

Кроме того, это смешанный сайт MVC и WebForms, если это имеет значение.

4b9b3361

Ответ 1

Вы можете игнорировать файл robots.txt и все страницы aspx в вашей маршрутизации.

routes.IgnoreRoute("{*allaspx}", new {[email protected]".*\.aspx(/.*)?"});
routes.IgnoreRoute("{*robotstxt}", new {[email protected]"(.*/)?robots.txt(/.*)?"});

Возможно, вы захотите также игнорировать значок.

routes.IgnoreRoute("{*favicon}", new {[email protected]"(.*/)?favicon.ico(/.*)?"});

Вы можете настроить регулярное выражение для исключения путей.

Восстает из источника .

Ответ 2

Указанный выше маршрут игнорирования не сработал у меня, но я нашел похожее:

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });

Ответ 3

Эта ошибка также может произойти, если внутри области в вашей области используется помощник Html.Action. Этот помощник всегда будет использовать область в качестве префикса, если вы специально не скажете об этом. Например.

@Html.Action("Main", "Navigation", new { area = string.Empty })

Ответ 4

Я нашел другое решение тоже... Хотя я не думаю, что буду использовать его, стоит посмотреть здесь в ответах

Следующее должно (теоретически) игнорировать поиск контроллеров для чего-либо с помощью '.' в нем.

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" },  // Parameter defaults
    new { controller = @"[^\.]*" }                          // Parameter contraints.
);

Ответ 5

У вас есть еще:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

... в вашем файле Global.asax.cs?

MVC помещает его туда по умолчанию, и он должен обрабатывать это.

Если вы это сделаете, проблема может заключаться в том, как вы смешиваете MVC и WebForms.

Ответ 6

Я столкнулся с этой ошибкой, когда я запрашиваю ресурсы, которых не было.

В частности, я запрашивал пользовательский файл CSS css:

<!--[if lt IE 8]>@Styles.Render("~/Content/ie7.css")<![endif]-->

(Это комментарии условий, интерпретируемые IE)

Однако фактический ресурс существовал на ~/Content/ie/ie7.css.

Таким образом, без каких-либо изменений в маршрутизации ошибка была решена с использованием правильного URL ресурса.