Получение ошибки 404 на веб-сайте MVC
У меня есть веб-сайт IIS7.5 на Windows Server 2008 с размещенным на нем веб-сайтом ASP.NET MVC2. Веб-сайт был создан в Visual Studio 2008, ориентирован на .NET 3.5, а IIS 5.1 был успешно настроен так же, как и для локального тестирования.
Однако, когда я пытаюсь перейти на страницу, запущенную в IIS7, я получаю ошибку 404.
Я проверил следующие вещи:
-
В журналах IIS нет записи 404 журнала.
- Собственно, в журнале IIS есть 404 записи.
- Пул приложений для веб-сайта настроен на использование интегрированного конвейера.
- Режим "customErrors" отключен.
- Установлен .NET 3.5 SP1
- Установлен ASP.NET MVC 2
- Я использовал MVC Diagnostics для подтверждения всех найденных DLL MVC.
- ASP.NET включен в IIS, который мы продемонстрировали, запустив страницу диагностики MVC.
- KB 2023146 действительно подчеркивал, что перенаправление HTTP отключено, поэтому мы включили его, но без радости.
ИЗМЕНИТЬ
Итак, мы установили самое простое приложение MVC в мире (тот, который создается при создании нового проекта MVC2 в Visual Studio), и мы все еще получаем 404s на любой странице, которую мы пытаемся получить, - например,
<my_server>/Home/About
будет генерировать 404.
Любые идеи будут высоко оценены!
Ответы
Ответ 1
Мы окончательно прикрепили эту проблему, экспортируя конфигурацию IIS рабочего сервера и сравнивая ее с нашей.
Это была действительно неясная настройка, которая была изменена с по умолчанию.
IIS ROOT → запрос Фильтрация → Вкладка "Расширения имени файла" и "rarr; Изменить настройки параметров и rarr; Разрешить расширения имен нерегистрируемых файлов
Это должно быть отмечено.
Это может быть установлено на уровне IIS или на уровне сайта.
![Screenshot of IIS showing location of Request Filtering option]()
Ответ 2
Это довольно часто происходит из-за следующих отсутствующих в web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
Ответ 3
У вас есть проблема только с одной страницей или весь сайт не работает?
A) 1 страница
- Вы можете использовать RouteDebugger, чтобы проверить правильность соответствия маршрута.
B) Весь сайт
-
Я предполагаю, что вы используете Windows Server - проверьте, включен ли ASP.NET в IIS, по умолчанию он отключен.
-
Вы можете использовать MvcDiagnostics, чтобы проверить, правильно ли установлены все DLL.
-
Вы работаете в интегрированном режиме IIS7 ? Классический режим IIS7 не позволяет автоматически перенастраивать URL без привязки к ASP.NET(как IIS6)
-
Убедитесь, что тэг Web.config настроен правильно.
Ответ 4
Рад, что исправил вашу проблему. Другие, изучающие эту проблему, должны принять во внимание исправление URL без дополнительных ссылок: http://support.microsoft.com/kb/980368
Ответ 5
Оформить заказ, если KB 2023146 применимо к вашему сценарию. Также попробуйте запросить прямое действие контроллера: /yoursitename/home/index
Ответ 6
Если ни одно из других решений не решило вашу проблему, убедитесь, что у вас есть
Global.asax
на вашем сайте. Это решило проблему для меня.
Ответ 7
По-видимому, это может иметь много разных причин.
Для нас проблема заключалась в том, что запись DNS была настроена для двух IP-адресов, но конфигурация IIS будет прослушивать только одну из них. Таким образом, мы получили непредсказуемые результаты, иногда это сработало, иногда несколько файлов (css и т.д.) Не загружались, а иногда и вся страница не загружалась.
Ответ 8
Для меня это было все об установке .NET Framework 4.6.1 на сервере (мое приложение предназначалось для этой версии)
Ответ 9
Вы также получите это, если привязки неверны. Если у вас нет www или поддомена, он вернет 404.
Ответ 10
У меня была эта проблема при запуске моего сайта MVC4 с пулом приложений, установленным в ASP.NET 4.0 и конвейером Classic, хотя обработчики расширения были установлены в моем web.config и корректно показывались в IIS. Сайт работал в Integrated Pipeline, поэтому я знал, что это проблема с конфигурацией, но я не мог прибить ее. Наконец, я обнаружил, что ASP.NET 4 был отключен для сервера в настройках ISAPI и CGI Restrictions. Я включил ASP.NET 4.0 и работал.
Ответ 11
В дополнение к проверке, если вы работаете в режиме интегрированного конвейера, убедитесь, что ваш пул приложений настроен на использование .NET! Я недавно столкнулся с этой проблемой, и когда я вошел, чтобы проверить настройки пула приложений, я обнаружил, что каким-то образом он был настроен на "No Managed Code". Упс!
![enter image description here]()
Ответ 12
Моя хостинговая компания исправила это для меня, выполнив это (я, конечно же, удалил исходное значение пароля).
<system.webServer>
<security>
<authentication>
<anonymousAuthentication password="<password>" />
</authentication>
</security>
</system.webServer>
Ответ 13
Обычно я сталкиваюсь с этой проблемой, когда есть проблема маршрутизации. Я сравниваю рабочий с нерабочим, чтобы решить его.
Однако сегодня я случайно создал виртуальный каталог в IIS.
Это должно быть приложение, щелкните правой кнопкой мыши виртуальный каталог (со значком папки) → Преобразовать в приложение:
![enter image description here]()
Ответ 14
Не используйте runAllManagedModulesForAllRequests. Вы хотите, чтобы IIS обрабатывал такие ресурсы, как изображения.
<system.webServer> <!-- Rather do NOT use this -->
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
Вместо этого добавьте модуль маршрутизации MVC
<system.webServer>
<modules>
<remove name="UrlRoutingModule-4.0" />
<add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
</modules>
</system.webServer>