Путь к контроллеру не найден для статических изображений? asp.net MVC проблема маршрутизации? - PullRequest
13 голосов
/ 25 марта 2010

У меня есть папка с изображениями, хранящаяся в ~ / Content / Images /

Я загружаю эти изображения через

<img src="/Content/Images/Image.png" />

В последнее время изображения не загружаются, и в моем журнале ошибок появляются следующие ошибки. Странно то, что некоторые изображения загружаются нормально, а другие не загружаются.

Кто-нибудь знает, что не так с моими маршрутами? Я пропустил маршрут игнорирования для папки / Content /?

Я также получаю ту же ошибку для favicon.ico и нескольких других файлов изображений ...

<Fatal> -- 3/25/2010 2:32:38 AM -- System.Web.HttpException: The controller for path '/Content/Images/box_bottom.png' could not be found or it does not implement IController.
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(Type controllerType)
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)
at System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext)
at System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Мои текущие маршруты выглядят так:

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

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

        routes.MapRoute(
            "ControllerDefault",                                              // Route name
            "{controller}/project/{projectid}/{action}/{searchid}",                           // URL with parameters
            new { controller = "Listen", action = "Index", searchid = "" }  // Parameter defaults
        );

Спасибо!

Ответы [ 6 ]

5 голосов
/ 25 марта 2010

Я бы вставил другой игнорируемый маршрут сразу под первым.

routes.IgnoreRoute("Content/Images/{*pathInfo}");
3 голосов
/ 25 марта 2010

Если вы посмотрите на представление обозревателя решений, я предполагаю, что ваша папка Content находится в корне проекта вместе с папкой для контроллеров и представлений. Попытка изменить изображение src, как показано ниже ...

<img src="../../Content/Images/Image.png" />
2 голосов
/ 16 апреля 2010
<img src="<%= Url.Content("~/Content/Images/Image.png")%>" alt="does this work?" />
1 голос
/ 25 марта 2010

Вам нужно объявить менее конкретные маршруты внизу:

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

routes.MapRoute(
    "ControllerDefault",
    "{controller}/project/{projectid}/{action}/{searchid}",
    new { controller = "Listen", action = "Index", searchid = "" }
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" }
);

Но я не думаю, что это проблема здесь. Из исключения кажется, что веб-сервер, выполняющий это приложение, имеет сопоставление с подстановочными знаками с фильтром aspnet_isapi, означающее, что все файлы будут связаны со средой выполнения ASP.NET, даже статические файлы.

0 голосов
/ 14 июля 2016

Исключение ... could not be found or it does not implement IController не должно быть ошибкой. На самом деле /favicon.ico не разрешает контроллер, так что это означает, что следующий модуль (или это обработчик?) Должен попытаться обработать запрос. В каком-то смысле это «ожидаемое исключение».

Проблема в том, что это исключение регистрируется и засоряет журналы. При использовании log4net добавление следующего элемента <filter> к приложению по умолчанию должно не допускать его:

<filter type="log4net.Filter.StringMatchFilter">
  <regexToMatch value="System.Web.HttpException \(0x80004005\): The controller for path '[^']*' was not found or does not implement IController\." />
  <acceptOnMatch value="false" />
</filter>
0 голосов
/ 25 марта 2010

У вас нет routes.RouteExistingFiles = true; где-нибудь, не так ли?

...