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



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



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




контроллер для пути '/роботы.txt'
не найден или не реализует
IController.




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



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

480   6  

6 ответов:

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

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

вы можете игнорировать фавикон тоже.

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

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

Haacked от источник.

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

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

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

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

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

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

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

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

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

... в вашем глобальном.асакс.в CS?

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

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

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

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

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

(это состояние комментарии, интерпретируется IE)

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

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

Comments

    Ничего не найдено.