Ответ 1
Я бы ввел еще один игнорированный маршрут сразу под первым.
routes.IgnoreRoute("Content/Images/{*pathInfo}");
У меня есть папка с изображениями, хранящаяся в ~/Content/Images/
Я загружаю эти изображения через
<img src="/Content/Images/Image.png" />
В последнее время изображения не загружаются, и я получаю следующие ошибки в моем журнале ошибок. Что странно, что некоторые изображения загружаются нормально, а другие не загружаются.
Кто-нибудь знает, что не так с моими маршрутами? Я пропустил маршрут игнорирования для /Content/folder?
Я также получаю ту же ошибку для 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
);
Спасибо!
Я бы ввел еще один игнорированный маршрут сразу под первым.
routes.IgnoreRoute("Content/Images/{*pathInfo}");
Если вы посмотрите на просмотр проводника решения, я предполагаю, что папка "Содержимое" находится в корне проекта вместе с папкой "Контроллеры и представления". Попробуйте изменить изображение src, как показано ниже...
<img src="../../Content/Images/Image.png" />
<img src="<%= Url.Content("~/Content/Images/Image.png")%>" alt="does this work?" />
Вам нужно объявить менее конкретные маршруты в нижней части:
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 даже с статическими файлами.
У вас нет routes.RouteExistingFiles = true;
где-нибудь?
Исключение ... 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>