Я получаю сообщение об ошибке «Не реализует IController» для изображений и файла robots.txt в MVC2 - PullRequest
52 голосов
/ 21 января 2010

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

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

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

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

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

Ответы [ 6 ]

75 голосов
/ 21 января 2010

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

routes.IgnoreRoute("{*allaspx}", new {allaspx=@".*\.aspx(/.*)?"});
routes.IgnoreRoute("{*robotstxt}", new {robotstxt=@"(.*/)?robots.txt(/.*)?"});

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

routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"});

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

Взломан из источника .

16 голосов
/ 26 января 2012

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

routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|jpg)(/.*)?" });
6 голосов
/ 02 июля 2011

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

@Html.Action("Main", "Navigation", new { area = string.Empty })
2 голосов
/ 21 января 2010

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

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

... в вашем Global.asax.cs?

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

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

2 голосов
/ 21 января 2010

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

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

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" },  // Parameter defaults
    new { controller = @"[^\.]*" }                          // Parameter contraints.
);
1 голос
/ 14 июня 2013

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...