Получение ошибки 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>