Помилка MVC4 HTTP 403.14 - заборонено


88

Я створив веб-програму .net4.5 ASP.NET MVC4, яка чудово працює локально (сервер IIS Express і розробник), але як тільки я розгортаю її на своєму веб-сервері, вона видає помилку 403. Я встановив .Net 4.5RC на сервері і навіть спробував aspnet_regiis -i біт, який усі рекомендували для своїх проблем із попередніми версіями MVC / .Net, але це не допомогло.

Будь-які ідеї?

EDIT : Докладніше про ситуацію. Сервер 32-бітний, і у мене є ще 4 додатки MVC3, які працюють нормально. Просто мій додаток MVC4 не працює.


Я зіткнувся з цією ж проблемою, коли створював нову програму asp.net 4.5 Web Forms . Локально він працював нормально (IIS 7.5), але при розгортанні на тестовому сервері (також IIS 7.5) тоді більшість моїх пакетних та мініфікованих файлів javascript та css не вдалося завантажити з 404 Not Found. Відповідь нижче про runAllManagedModulesForAllRequests вирішив проблему для мене!
ClearCloud 8

Може бути , я відповів на це питання по адресою: stackoverflow.com/questions/24343788 / ...
fsbf

<system.webServer> <модулі runAllManagedModulesForAllRequests = "true" /> </system.webServer>
Jinto John

Відповіді:


172

Спробуйте

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

Через

/server/405395/unable-to-get-anything-except-403-from-a-net-4-5-website


1
Якби це було на місці, все зробив, і все ще працюють лише сайти MVC 4. Повинен бути якийсь інший фокус, який повинен існувати, щоб це працювало.
Максим Васильович Павлов,

1
Це. Без жодної радості випробував усі інші біржові рішення, але саме це вирішило проблему.
Джулія Хейворд

1
Дорогий друже, я роблю це, але це не працює. Справді, я працював з MVC 4 та VisualStudio 2012, мій проект працював добре до вчора, але після деяких звичайних змін у моїх кодах ця помилка зростає на сторінці за замовчуванням (домашній / індекс). чи може будь-яке тіло мені допомогти, будь ласка? ..
А.Дара

4
Це виправлення не підходить для цієї проблеми (див. Посилання у відповіді Джейсона Купманса). набагато краще завантажити відповідне виправлення тут microsoft.com/en-us/download/…
Ахмад Ібрагім

@AhmadIbrahim насправді це вирішення проблеми. Виправлення стосується лише 64 біт, питання чітко визначає 32 біти. Існують певні конфігурації, для яких RAMMFAR є найнадійнішим робочим рішенням і додає мінімальне навантаження сервера, якщо CDN використовуються належним чином.
MarkKGreenway

22

Помилка 403.14 - це код помилки HTTP, через який не дозволяється перераховувати вміст каталогу. Будь ласка, переконайся в цьому

  1. Ви налаштували веб-сайт як додаток у IIS
  2. На сервері встановлено .NET 4.5
  3. Ви встановили пул програм для запуску відповідної версії платформи .NET (тобто для нього не встановлено .NET 2.0
  4. Ви використовуєте інтегрований конвеєр у вашому пулі програм
  5. .NET 4.5 фактично зареєстровано в IIS. Будь ласка, перегляньте цю публікацію щодо подібної проблеми / вирішення

Зазвичай a та d є найбільшими проблемами, пов'язаними з розгортанням MVC у IIS


1. Я не налаштував веб-сайт як додаток. 2. У мене встановлено .net 4.5, 3. мій пул додатків націлений на правильний фреймворк. 4. У моєму пулі було використано класичний, змінено на інтегрований, але не допомогло. 5. Я майже впевнений, що зареєстровано 4,5.
mithun_daa

1
@mithun_daa - Якщо ви не налаштували свій веб-сайт як додаток, це досить просто -> клацніть правою кнопкою миші віртуальний каталог / веб-сайт і перетворити на додаток (або додайте додаток, термінологія в даний момент мені не вдається)
Томмі

Це конкретна річ MVC4? Тому що я ніколи не встановлював свої проекти MVC3 як програми, і вони працюють чудово.
mithun_daa

Тоді ви можете розгорнути -> але будь-яку веб-програму .NET потрібно встановити як програму в IIS. Однак, якщо ви просто розміщуєте їх під веб-сайтом за замовчуванням, тоді він працює під додатком веб-сайту за замовчуванням. Переконайтеся, що пул програм веб-сайту за замовчуванням налаштовано правильно (.NET 4 / інтегровано). Коли ви створюєте віртуальний каталог / віртуальний веб-сайт у IIS, ви також можете встановити його для власного додатка.
Томмі

Можливо, я вас заплутав, але жоден із цих сайтів не знаходиться на веб-сайті за замовчуванням. Я клацаю правою кнопкою миші на "Сайти" в IIS7 і вибираю "Додати веб-сайт". Ось як я це робив.
mithun_daa

11

Можливо ... Якщо ви випадково скористаєтесь майстром публікації (як я це зробив) і встановите прапорець "Попередньо скомпілювати під час публікації" (як і я) і побачите ті самі симптоми ...

Так, я бив себе за голову, але після зняття цього прапорця, здавалося б, не пов'язаного налаштування, всі описані симптоми зникають після передислокації.

Сподіваємось, це виправляє деяких людей.


Якщо у вас це виникає, можливою основною причиною є наявність іншої версії зовнішньої бібліотеки у виробничому середовищі. Я мав мій MVC додаток скомпільовано з більш нової версії DLL 3 партії і старішої версії на сервері ..
Valge

Ось хлопчикові дивно, дитині, диво-людині, явищу, нестримному, королю, ось - @Brian Kirkpatrick дами та джентльмени
Luis Villarroel

10

Windows-> Пуск -> Увімкнення та вимкнення функцій вдів

Переконайтесь, що ви перевірили необхідні параметри

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


6

Перед застосуванням

runAllManagedModulesForAllRequests="true"/>

розгляньте посилання нижче, яке пропонує менш радикальну альтернативу. У дописі автор пропонує таку зміну локального web.config:

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

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html


Це справжня відповідь. Дякую!
Співоніус

5

У Visual Studio 2012 є Рефактор -> Перейменувати помилку, яка помилково перейменовувала "ідентифікатор" всередині літерального значення рядка параметра url у моєму RouteConfig.cs. Це призвело до 403,14 на нову та іншу коректну установку як у Windows Server 2012, так і в Windows Server 2008 R2.

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

було змінено на

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{renamed_text}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Для мене, я виявив давно , що я можу ввести nullдля nameпараметра уникнути придумайте ім'я для кожного маршруту. Виявляється, це також іноді спричиняє 403 (лише у нашому продюсерському середовищі Win Server 2008 R2, що працює .NET 4.5.1, MVC 5 у проекті VS2013. Для вирішення я додав ім’я для кожного маршруту.
tristankoffee

2

Ви також можете отримати 403, якщо під час тестування на сервері розробника ви використовуєте інтегрований конвеєр, а потім встановлюєте як класичний конвеєрний режим на своєму веб-сервері IIS 7.5, також мені не вистачало папки app_data, яка також потрібна


2

Якщо ви використовуєте IIS 8.5 у Windows 8 або Server 2012, ви можете виявити, що запуск mvc 4/5 (.net 4.5) не працює у віртуальному каталозі. Якщо ви створите запис локального хосту у файлі хосту, щоб вказувати назад на вашу локальну машину, а потім спрямовувати новий локальний веб-сайт IIS до цієї папки (із відповідним записом заголовка хоста), ви виявите, що це працює.


Навіщо розміщувати одну і ту ж відповідь у кількох місцях?
devnull

8
Тому що я намагався відшукати рішення, і воно стосується обох. Врятуйте когось від полювання навколо.
Мастро

Ви не повинні публікувати дублікати відповідей. Це все, що я можу сказати.
devnull

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

Ви можете використовувати код вище


1

Я встановив для пулу додатків нового додатка значення DefaultAppPoolв IIS, яке, очевидно, використовує Classicконвеєр з .NET v.2.0.

Для вирішення проблеми я створив новий пул програм за допомогою Integratedконвеєра та .NET v4.0. саме для цього нового додатка, а потім все почало працювати, як очікувалося.

Не забудьте призначити цей новий пул програм додатку. Виберіть програму в IIS, клацніть, Basic Settingsа потім виберіть новий пул програм для програми.


0

той, який я бачу частіше останнім часом, - це IIS і дозволяє запускати 32-бітні програми

Це те, що ви спробували. інакше нам потрібна додаткова інформація про виробничі версії та версії сервера розробників


Вибачте, але я не зрозумів, що ви мали на увазі. Це 32-бітний сервер. Я оновив свою публікацію, щоб додати більше інформації.
mithun_daa

Ааа ... Вони в окремих пулах app_pools?
MarkKGreenway

Так, фактично кожен із моїх сайтів має власні пули програм.
mithun_daa

0

У мене трохи інша проблема, на сервері 2012 я якось забув увімкнути asp.net 4.5, тому, якщо у вас ця проблема, перевірте, чи ви її ввімкнули.


0

Я запускаю Windows Server 2012 R2 на Azure та ASP.NET 4.5, IIS 8

Я вирішив цю проблему, видаливши всі елементи ASP.NET у програмах та засобах, а потім перевстановивши ASP.NET, подібний до цього, за допомогою Диспетчера серверів за допомогою Додавання ролей та функцій: вибрав інсталяцію на основі ролей або функцій, вибрав мій сервер, а потім для Вибору ролі сервера вибрали Веб-сервер (IIS) / Веб-сервер / Розробка додатків, потім клацнули ASP.NET 4.5, підтвердили встановлення необхідної умови, а потім переінсталювали ASP.NET 4.5.

Мої попередні пошуки привели мене до думки, що проблема насправді пов'язана з проблемою реєстрації в ASP.NET. У попередніх версіях ASP.NET насправді існує утиліта, яку можна запустити для реєстрації ASP.NET без перевстановлення, але, здається, вона вже не доступна.


0

Я вирішую проблему з відкриттям візуальної студії, розширенням посилань та зміною властивості "Копіювати локально" на "Істинно".

Я виявляю це, порівнюючи dll старої версії з dll моєї нової версії (яка не працювала)


0

У моєму випадку сторінкою моєї програми за замовчуванням був index.html, якого не було в параметрах документа за замовчуванням. Додавши його, виправлено 403.14 заборонену помилку.


0

У моєму випадку проблема була спричинена користувацьким ActionFilterAttribute, який був своєрідним атрибутом глобального фільтра. Атрибут створив екземпляр служби через Autofac, але служба аварійно завершила роботу в конструкторі:

public ActionFilterAttribute()
{
    _service = ContainerManager.Resolve<IService>();
}

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}

0

У моєму випадку ані функції Windows, ані aspnet_regiis -iне працювали. Після багатогодинного копання в Інтернеті я зробив власне рішення:

  1. У диспетчері IIS у модулях я змінив успадкування на локальний у вузлі UrlRoutingModule-4.0:

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

  2. У web.config я вставив декілька порад з цього форуму:

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

Сподіваюся, це допоможе

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