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: \ веб-сайтів \ 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
Glenn Slaven

1
Це було все. Видалення касети Nuget іноді видаляє її. Дякую.
Захарі Скотт

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

6
Мені подобається коментар відповіді "Можливо, комусь це корисно" ... lol ... Схоже, це корисно для TON людей, включаючи і мене.
Пол

126

Відповів на SO тут , питання: 403 - Forbidden на основний 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.


У моєму випадку я перемістив його випадково мишкою, не помічаючи. Дякую!
Mathias Lykkegaard Lorenzen

Щойно витратив 2 години, тому що я не помітив копіювання цього файлу після витирання папки веб-документів!
Steven Sproat

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-on-iis-7-і-iis-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 як administratorі запустіть iisresetкоманду, щоб перезапустити IIS Server.

Сподіваюся, це допомагає ...


Порада: Якщо після цього ви все-таки отримаєте помилки дозволу, вам, можливо, знадобиться зробити iisreset в cmd як Admin після цього, щоб ваш сайт запустився в 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. Ця публікація в блозі допомогла мені вирішити проблеми, щоб знайти відповідь (незважаючи на старіші версії 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 перейдіть на веб -> Веб-сайти та виберіть зі списку доменне ім’я вашого веб-сайту. , після цього в правій частині сторінки, щойно відкрилася, перевірте, чи бачите ви слово НАЧАЛО, в іншому випадку, якщо ви бачите слово ЗАСТАНОВЕНО, зробіть його знову. Це все.


0

Я знаю, що це стара тема, але ви також можете отримати цю помилку (коли ви налагоджуєте), якщо у контролері є папка, названа так само, як і маршрут.

Наприклад, якщо у вас є UserController, з маршрутом під назвою / Користувач, і ви ТАКОЖ маєте папку у своєму рішенні під назвою "Користувач", то IISExpress спробує переглядати папку, а не показувати ваш вид.


0

Спробувавши кожне запропоноване тут рішення, я знайшов ще одне можливе рішення: URLScan

У IIS було відключено WebDAV, навіть у web.config моєї програми обробник та модуль WebDAV було видалено. PUT все ще повернули 403 - Заборонено без записів журналу в журналах IIS. (GET / POST спрацював чудово).

Виявляється, у IIS був увімкнутий фільтр ISAPI (URLScan), який перешкоджав усім PUT. Після видалення URLScan він працював для мене.


0

Моя ситуація була зовсім іншою, ніж будь-яка з них, і повідомлення 403: Заборонене повідомлення про помилку було трохи червоною оселедець.

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

Двічі перевірте, чи не пропущено запис у файлі web.config, який намагається отримати доступ у вашому модулі Global.asax.


0

Якщо ви схожі на мене і у вас є програма, яка використовує NHibernate, і вищевказані відповіді не вирішили вашу проблему.

Ви повинні переглянути рядок з'єднання у вашій програмі; можливо, у файлі webconfig, щоб переконатися, що він правильний.


-1

Я використовую імперсоніфікуючу особу:

<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: Виберіть веб-сайт, для якого в IIS виробляється помилка HTTP, а потім натисніть на перегляд каталогів, як показано на зображенні нижче:

Крок 2: У вікні перегляду каталогів у IIS натисніть на Увімкнути дії в правій частині, як показано на схемі нижче:

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


-1

Я використовую: Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5

Якщо ніщо з перерахованого вище не спрацювало, спробуйте це:

Зніміть прапорець "Прекомпілювати під час публікації"

Це штовхнуло мою задку на кілька днів.


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

-1

У мене виникла ця проблема, але її було легко виправити, перейшовши до Менеджера інформаційних служб Інтернету (IIS), двічі клацнувши перегляд каталогів та натиснувши Увімкнути.

У моєму випадку я мав доступ до файлів безпосередньо, але не мав доступу до папок.


-1

Я неправильно ввів IP-адресу в одну цифру, що означало, що вона переходить на один з моїх інших серверів. Дуже заплутано, коли ви отримуєте сторінку з помилками .NET, але з неправильної машини!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.