ASP.NET MVC не использует контроллер для явного маршрута файла в IIS7 - PullRequest
2 голосов
/ 30 марта 2010

Рассмотрим StaticResourceController, который находит и обслуживает файлы.

Я установил явный маршрут для "favicon.ico", который будет обрабатывать запрос для этого файла, используя StaticResourceController:

routes.MapRoute(
        "favicon",
        "favicon.ico",
        new { controller = "StaticResource", action = "Get", file = "favicon.ico", area="root"},
        new[] { "Dimebrain.Mvc.Controllers" }
        );

В IIS6 ожидаемый результат возникает при выполнении запроса на http://localhost:8080/favicon.ico.

К сожалению, при развертывании на IIS7 http://localhost/favicon.ico возвращает сгенерированный IIS 404, предположительно потому, что он действительно ищет favicon.ico в корневой веб-папке, где он не существует.

У меня достаточно событий в StaticResourceController, так что это не очень хорошая вещь для моего приложения, тем более что оно мультитенантно и файл favicon.ico может измениться. Я настроил свои модули веб-сервера для обработки каждого запроса и переопределил RouteCollection, чтобы игнорировать проверки файлов с RouteExistingFiles.

Почему UrlRoutingModule мешает в IIS7 и заставляет обслуживать статический файл с диска (404)?

Ответы [ 2 ]

1 голос
/ 13 марта 2013

В дополнение к ответу Дэниела Кренны, вам нужно добавить в файл web.confug в разделе system.webServer:

<modules runAllManagedModulesForAllRequests="true"/>
1 голос
/ 24 сентября 2010

В случае, если кто-то еще столкнется с этой проблемой, решение состоит в том, что вам нужно сообщить MVC, чтобы он не обрабатывал запросы в папках, где находятся ваши действительные статические файлы:

// Make sure MVC is handling every request for static files
routes.RouteExistingFiles = true;

// Don't process routes where actual static resources live
routes.IgnoreRoute("content/{*pathInfo}");
routes.IgnoreRoute("scripts/{*pathInfo}");
routes.IgnoreRoute("areas/admin/content/{*pathInfo}");
routes.IgnoreRoute("areas/admin/scripts/{*pathInfo}");
...