ASP MVC в IIS 7 приводит к: ошибка HTTP 403.14 - запрещено


146

Я занимаюсь разработкой веб-проекта ASP MVC. Теперь у меня есть требование, которое вынуждает меня развернуться в среде разработки IIS7 (чтобы проверить некоторые функции). Я получаю вышеупомянутое сообщение об ошибке всякий раз, когда я пытаюсь ввести URL-адрес веб-сайта. (Примечание: машина для разработки: Vista Home Premium, IIS7)

Что я сделал до сих пор:

Отредактировал файл HOSTS (C: \ WINDOWS \ system32 \ drivers \ etc \ hosts).

Поместите в него два домена (127.0.0.1 domain1.com и 127.0.0.1 domain2.com).

Создана папка c: \ sites \ dirOfApplication и развернута из Visual Studio 8 в эту папку.

В IIS7 создан новый сайт с именем хоста domain1.com и папкой приложения выше.

Ввод адреса domain1.com в веб-браузере приводит к вышеуказанной ошибке (ошибка HTTP 403.14 - Запрещено - веб-сервер настроен так, чтобы не перечислять содержимое этого каталога.)

Я думаю, что что-то упустил, но не знаю что! Попытался развернуть файлы System.Web.Mvc, System.Web.Abstraction & System.Web.Routing с тем же результатом. Всякий раз, когда я пытаюсь нажать F5 и запустить приложение, оно работает отлично!


возможный дубликат ASP.NET MVC на IIS 7.5
Fenton

Ответы:


224

Может быть, это кому-то пригодится: после преобразования моего приложения в MVC 4 с .NET Framework 4.5 и установки инфраструктуры на мой сервер с IIS 7.0 я столкнулся с той же «запрещенной» ошибкой, упомянутой в вопросе. Я попробовал все варианты, описанные выше, но безрезультатно, когда заметил

<system.webServer>
 <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

отсутствовал в моем web.config. После добавления этого все заработало. Просто, но легко упустить из виду ...

РЕДАКТИРОВАТЬ:

Конечно, решение выше будет работать, но это действительно пустая трата ресурсов. Я думаю, что лучше добавить модуль маршрутизации, как указано Крисом Херрингом в комментариях.

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

2
Оказывается, когда я удалил пакет NuGet, он удалил runAllManagedModulesForAllRequests="true"из моего файла Web.config. Спасибо, что упомянули об этом, прежде чем я провел всю ночь, пытаясь понять это.
Schmalls

3
ЭТОТ!! Arrrrgh Я потратил / впустую целый день, пытаясь заставить это работать, пока я не нашел ваш ответ, спасибо! Странно то, что он будет работать на IIS на моей локальной машине просто отлично, но не на рабочей коробке, и они оба работают на IIS7.5
Гленн

1
Вот и все. Удаление кассеты Nuget иногда удаляет его. Спасибо.
Захари Скотт

8
постарайтесь не использовать этот параметр, добавив модуль маршрутизации - britishdeveloper.co.uk/2010/06/…
Крис Херринг

6
Мне нравится ответный комментарий "Может быть, он кому-то полезен" ... смеется ... Похоже, он полезен ТОННЫМ людям, включая меня самого.
Пол

126

Ответ на SO здесь , вопрос: 403 - Запрещено развертывание базовой MVC 3 на iis7.5

Беги aspnet_regiis -i. Часто я обнаружил, что вам нужно сделать это, чтобы заставить работать приложения 4.0. Откройте командную строку как Administrator(щелкните правой кнопкой мыши значок командной строки и выберите «Запуск от имени администратора»):

cd \
cd Windows\Microsoft.NET\Framework\v4.xxx.xxx
aspnet_regiis -i

После того как приложение установлено и зарегистрировано, убедитесь, что ваше приложение использует пул приложений, настроенный на .NET 4.0.

ОБНОВЛЕНИЕ: я только что нашел проблему с этой командой. Использование -i обновило все пулы приложений до ASP.NET 4.0.

Использование aspnet_regiis -irустанавливает версию ASP.NET, но не меняет веб-приложения на эту версию. Вы также можете просмотреть опцию -iru.


У меня тоже сработало. После запуска aspnet_regiis -i команда UrlMappingModule была установлена ​​в IIS.
Маниш Гупта

После установки IIS мне нужно было запустить aspnet_regiis, чтобы все заработало, хотя .NET 4, похоже, уже был зарегистрирован.
Брайан

Если инфраструктура была установлена ​​до IIS, то да, вам нужно будет aspnet_regiis.
Бретцки

2
Не забывайте, что для 64-битной системы это «Framework64». То есть Windows \ Microsoft.NET \ Framework64 \ v4.xxx.xxx
grahamesd

Для этого использования 64- или 32-битная версия aspnet_regiis не имеет значения. Некоторые особые случаи перечислены здесь: msdn.microsoft.com/en-us/library/k6h9cz8h.aspx#Anchor_1
Бретцки,

34

Я тоже столкнулся с этой ошибкой. Все настройки и разрешения были правильными. Но я забыл скопировать Global.asax на сервер, и это привело к ошибке 403.


В моем случае я случайно переместил его мышью, не замечая этого. Спасибо!
Матиас Ликкегор Лоренцен,

Просто потратил впустую 2 часа, потому что я упустил возможность скопировать этот файл после очистки папки с веб-документами!
Стивен Спроат

10

Это из-за того, что вы слишком уверены в том, что вы (я) делаете!

На моей машине установлен IIS 7, но требуемого компонента ASP.NET (Панель управления-> Программы-> Включить / Выключить-> ASP.NET) не было.

Таким образом, установка это решило проблему


9

Я была такая же проблема. Эта статья поддержки Microsoft исправила это для меня.
https://support.microsoft.com/en-us/help/2023146/mvc-2-and-asp.net-4-web-forms-applications-that-use-url-routing-might-return-http- 404-ошибки , когда-они-попытка-к-процесса extensionless-URLs-на-МИС-7-и-МИС-7,5

В диалоговом окне «Включение или отключение компонентов Windows» приложения «Программы и компоненты» панели управления Windows выполните следующие действия:

  1. Перейдите к следующему узлу: Информационные службы Интернета -> Службы всемирной паутины -> Общие функции HTTP
  2. Убедитесь, что выбран параметр «Перенаправление ошибок HTTP».

-или-

  1. Перейдите к следующему узлу: Информационные службы Интернета -> Службы всемирной паутины -> Функции производительности
  2. Убедитесь, что выбран параметр «Сжатие статического содержимого». После того, как любой из вариантов был выбран, нажмите «ОК», чтобы сохранить изменения.

Повторное включение либо модуля перенаправления ошибок HTTP, либо модуля сжатия статического содержимого гарантирует, что ASP.NET и IIS правильно синхронизируют события конвейера HTTP. Это позволяет модулю маршрутизации URL обрабатывать URL без расширений.


7

Попробуйте применить следующие настройки, показанные ниже:

1) Дайте необходимое разрешение IIS_IUSRSпользователю IIS Server(щелкните правой кнопкой мыши на веб-сайте, затем выберите «Редактировать разрешения»> «Безопасность»).

введите описание изображения здесь

2) Если вы используете .NET Framework 4, убедитесь, что версия .NET Framework находится v4.0на том, Application Poolчто использует ваш веб-сайт.

введите описание изображения здесь

3) Откройте Commanp Prompt as administratorи выполните iisresetкоманду для перезапуска IIS Server.

Надеюсь это поможет...


Совет: Если после этого вы по-прежнему получаете ошибки разрешения, вам может потребоваться выполнить iisreset в cmd от имени администратора после этого, чтобы ваш сайт работал в IIS.
Кори Кох

6

В моем случае мне помог следующий подход:

  1. aspnet_regiis -i в Windows\Microsoft.Net\Framework

  2. Добавление модулей в system.webServer

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        ...
    </system.webServer>

Я предполагаю, что вы пропустили рамки. Но откройте cmd от имени администратора и запустите aspnet_regiis -i в Windows \ Microsoft.Net \ Framework \ v4.0.30319
DeadlyChambers,


3

На снимите флажок «Прекомпиляция Во время издания» - я получаю 403.14 ошибку на веб - сервиса , я только что написал в VS2015 , так что я переписал его в VS2013 и получаю ту же ошибку. В обоих случаях у меня была «Прекомпиляция во время публикации». Я снял флажок, но все еще получал ошибку. В моем случае у меня также было « Удалить все существующие файлы перед публикацией », но я не удалял все из целевого каталога на сервере перед копированием туда новых опубликованных файлов. Если вы этого не сделаете - файл PrecompiledApp.config останется позади, что вызывает проблему. После того как я удалил этот файл, у меня были золотые качества в версиях моего веб-сервиса VS2013 и VS2015.


2

Я попробовал все здесь; ничего не получалось. Проблема была в моем Web.configфайле, как-то зависимая привязка сборки была изменена с минимальной 1на минимальную 0.

<!-- was -->
<runtime>
    <assemblyBinding>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" />
                <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />


<!-- should have been -->
                <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />

1

Пожалуйста, обратите внимание, что иногда неправильный Managed pipeline modeвызовет эту ошибку. Есть два варианта выбора integratedи classic.


1

Как исправить «Ошибка HTTP 403.14 - Запрещено Веб-сервер настроен так, чтобы не отображать содержимое этого каталога»

Эта ошибка возникает, когда у вас запущен MVC 2+ на IIS 7+, это потому, что ASP.NET 4 не был зарегистрирован в IIS. В моем случае я создавал проект MVC 3 и размещал его на IIS 7.5.

Чтобы это исправить, убедитесь, что у вас установлен MVC 2 или выше и установлен .Net Framework 4.0, затем запустите командную строку от имени администратора и введите следующую строку:

32 бита (x86)

% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

64 бит (x64)

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir


1

Проверьте ваш файл Global.asax . В моем случае это было пусто.


1

Если верхние ответы не работают, найдите конфигурацию, названную PrecompiledApp.configв каталоге хостинга, и удалите ее, если она существует. Этот файл мешает IISExpress и LocalIIS работать должным образом. (И я думаю, что это ошибка) Содержимое файла в моем случае было:

<precompiledApp version="2" updatable="true"/>

И я на 100% уверен, что это была проблема с моим делом, так как я попробовал все за 2 часа и много раз тестировал с этим конфигом.

Еще одна вещь: вы не можете использовать aspnet_regiisв более новых версиях Windows и IIS, поэтому попробуйте

dism /online /enable-feature /featurename:IIS-ASPNET45 /all


0

Я также столкнулся с этой же ошибкой, несмотря на все предоставленные решения по следующим причинам:

  • Отсутствующие библиотеки DLL
  • Строка подключения к базе данных указывает на недоступный сервер.

0

В моем случае web.config и все файлы, кроме папки / bin, отсутствовали (как-то не копировались).
Глупо, но это было последнее, что я проверил.


0

Недавно я обнаружил эту ошибку и обнаружил, что проблема вызвана тем, что функция «Перенаправление HTTP» не включена на моем Windows Server. Этот пост в блоге помог мне пройти через поиск и устранение неисправностей, чтобы найти ответ (несмотря на то, что это были более старые версии Windows Server): http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable -not-working-with-iis.aspx для более новых серверов перейдите в раздел « Управление компьютером», затем прокрутите вниз до роли «Веб-сервер» и нажмитеadd role services


0

С проектом ASP.NET с C # 4.5 я решил эту проблему, установив расширение ASP.NET в установщике веб-платформы


0

Также возможна еще одна вещь

установить .net Framework 4.0 вручную

Это решение для IIS7 в окне 7

открыть CMD с администрацией превалирует

перейдите в каталог "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319"

введите aspnet_regiis.exe -i

попал в ваш менеджер inet, набрав команду run "inetmgr"

обновить свой IIS7

перезагрузите сайт.


0

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

Фактически мой веб-сайт был ОСТАНОВЛЕН по какой-то причине, о которой в настоящее время я не знаю, чтобы проверить, есть ли у вас такая же проблема, на главной странице WebsitePanel перейдите в раздел Веб-> Веб-сайты и выберите доменное имя вашего веб-сайта из списка , после этого в правой части только что открытой страницы проверьте, видите ли вы слово STARTED, иначе, если вы видите слово STOPPED, заставьте его начать снова. Вот и все.


0

Я знаю, что это старая тема, но вы также можете получить эту ошибку (при отладке), если у вас есть папка с именем, совпадающим с маршрутом в контроллере.

Например, если у вас есть UserController с маршрутом / User и у вас также есть папка в вашем решении с именем "User", то IISExpress попытается просмотреть папку, а не показывать ваш вид.


0

Попробовав все предложенные здесь решения, я нашел еще одно возможное решение: URLScan

В IIS был отключен WebDAV, даже в файле web.config моего приложения обработчик и модуль WebDAV были удалены. PUT по-прежнему возвращает 403 - Запрещено без каких-либо записей в журналах IIS. (GET / POST работал нормально).

Оказывается, в IIS был активирован активный фильтр ISAPI (URLScan), который предотвращал все PUT. После удаления URLScan у меня все заработало.


0

Моя ситуация была совершенно иной, чем любая из этих, и сообщение об ошибке 403: Forbidden было немного красной селедкой.

Если ваша функция Application_Start () в модуле Global.asax пытается получить доступ к web.config, а запись, на которую она ссылается, отсутствует, IIS блокируется и (по некоторым причинам) выдает сообщение об ошибке 403: Forbidden.

Дважды проверьте, что вы не пропустили запись в файле web.config, к которой вы пытаетесь получить доступ в модуле Global.asax.


0

Если вы похожи на меня и у вас есть приложение, использующее NHibernate, и приведенные выше ответы не решили вашу проблему.

Вы должны посмотреть на строку подключения в вашем приложении; возможно, в файле webconfig, чтобы убедиться, что это правильно.


-1

Я использовал Identity Impersonate:

<system.web>
    <identity impersonate="true" userName="domain\username" password="password"/>
</system.Web>

При переходе на сервер вы должны предоставить имени пользователя доступ к Temporary ASP.NETпапке «Файлы», чтобы она могла правильно читать, записывать и выполнять:

C:\Windows\Microsoft.NET\"frameworkversion"\"aspversion"\Temporary ASP.NET Files

Очевидно, замените «frameworkversion» и «aspversion» версиями, которые вы используете.


-1

Шаг 1. Выберите сайт, для которого возникает ошибка HTTP в IIS, а затем нажмите «Просмотр каталогов», как показано на рисунке ниже:

Шаг 2. В окне просмотра каталогов в IIS нажмите «Включить в действиях» с правой стороны, как показано на рисунке ниже:

Теперь просмотр каталога включен для вашего сайта asp.net, просто перезапустите веб-приложение в IIS и просмотрите сайт в браузере и посмотрите результат.


-1

Я использую: Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5

Если ничего из вышеперечисленного не сработало, попробуйте следующее:

Снимите флажок «Прекомпилировать во время публикации»

Это пнул мой зад на несколько дней.


@ d-kermott, может быть, мой [find] [( stackoverflow.com/a/31319136/912481 ) также будет полезен для вас?
Камиль Гареев

-1

У меня была эта проблема, но она была легко устранена, для этого я обратился к Менеджеру информационных служб Интернета (IIS), дважды щелкнув Просмотр каталога и нажав Включить.

В моем случае я мог получить доступ к файлам напрямую, но не мог получить доступ к папкам.


-1

Я ошибочно набрал IP-адрес одной цифрой, что означало, что он идет на один из моих других серверов. Очень запутанно, поскольку вы получаете страницу ошибки .NET, но не с того компьютера!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.