ASP.NET MVC на IIS 7.5


338

Я запускаю Windows 7 Ultimate (64 біт) за допомогою Visual Studio 2010 RC. Нещодавно я вирішив запустити / налагодити VS мої програми на IIS, а не сервер розробників, який поставляється разом з ним.

Однак кожен раз, коли я намагаюся запустити додаток MVC, я отримую таку помилку:

Помилка HTTP 403.14 - Заборонено Веб-сервер налаштований не перераховувати вміст цього каталогу. Детально

Інформація про помилку

Каталог модулівListingModule

Повідомлення ExecuteRequestHandler

Помилка обробника StaticFile

Код 0x00000000 Запитано

URL-адреса http: // localhost: 80 / mySite /

Фізичний шлях C: \ myProject \ mySite \

Метод входу Анонімний вхід

Користувач анонімний

Я помістив default.aspxфайл у каталог і отримав таку помилку:

Помилка HTTP 500.21 - внутрішній обробник помилок сервера "PageHandlerFactory-Integrated" має поганий модуль "ManagedPipelineHandler" у своєму списку модулів

Чи є якісь інші кроки, які я забув зробити, щоб це працювати?

Примітки: після встановлення VS 2010 RC я встановив IIS 7.5. Я використовував вбудовану кнопку "Створити віртуальний каталог" на вкладці "Веб" на вкладці "Властивості" проекту MVC у Visual Studio 2010. Я переконався, що програма використовує пул додатків ASP.NET 4.

Нижче наведені встановлені функції IIS, які я маю.

alt текст


Гаразд, у мене є подібна проблема, і вона з’являється лише на веб-сайтах ASP.NET MVC 3. Веб-сайти ASP.NET MVC 2 працюють чудово. Я помістив файл Default.aspx у корінь веб-сайту, і він добре підійшов, немає проблем. У мене в біні розгорнуто веб-сайт ASP.NET MVC 3, використовуючи VS2010 SP1, і досі немає ніякої радості. Я на цьому дотепно закінчуюсь.
Умар Фарук Хавая

5
У мене є те саме питання. Я встановив програму використовувати 4.0 інтегрований, запустив команду реєстрації, щоб зареєструвати .NET з IIS (7.5) і все одно отримую цю помилку.
Колін Уайт

2
Я нарешті -то зміг знайти проблему в моєму наборі вгору, що було те, що я перейменував файл _Layout.cshtmlв _PageLayout.cshtmlі зробив відповідні зміни , _ViewStart.cshtmlа також, але , мабуть , цього було недостатньо. Як тільки я повернув ім'я _Layout.cshtml, воно почало працювати. Заплутаним було те, що він _PageLayout.cshtmlбув підібраний правильно на 32-х бітовій версії Win7, але не був підібраний на 64-бітній Win7 або WinSvr2K8 R2.
Umar Farooq Khawaja

3
Хтось знайшов рішення для цього в Windows 8 за допомогою IIS 8?
Eric Z Beard

3
Якщо ви на Windows Server 2012 або вікно 8 см це: [ stackoverflow.com/questions/12134713 / ... [1]: stackoverflow.com/questions/12134713 / ...
Lomak

Відповіді:


499

ASP.NET 4 не був зареєстрований у IIS. Довелося виконати наступну команду в командному рядку / run

32-бітна (x86) Windows

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

64-бітова (x64) Windows

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

Примітка з коментаря Девіда Мердока:

Що версія .net змінилася з моменту опублікування цього відповіді. Перевірте, яка версія фреймворку знаходиться в каталозі% windir% \ Microsoft.NET \ Framework64 та змініть відповідну команду перед запуском (зараз це v4.0.30319)


9
Зверніть увагу на "64" в Framework64 для 64-розрядних Windows! що вкусив мене в * ss. Я повинен встановити 32-бітну версію 4 або 5 разів без ефекту.
Бен Леш

14
Що версія .net змінилася з моменту опублікування цього відповіді. Перевірте, яка версія фреймворку знаходиться в %windir%\Microsoft.NET\Framework64каталозі та змініть команду відповідно до запуску (зараз це v4.0.30319).
Девід Мердок

1
додати до @blesh, якщо у вас 64-бітний і запущений 32-розрядний aspnet_regiis.exe, він може просто повторно показати вам параметри і нічого не робити
xster

3
Якщо в папці .net відсутня команда aspnet_regiis.exe, завантажте повний .net Framework Installer microsoft.com/download/en/…
warrickh

11
У IIS8 btw це не працює, якщо ви спробуєте отримати "Цей параметр не підтримується в цій версії операційної системи. Замість цього адміністраторам слід встановити / видалити ASP.NET 4.5 з IIS8, використовуючи" Увімкнення / вимкнення функцій Windows ". діалогове вікно, інструмент управління менеджером сервера або інструмент командного рядка dism.exe. Для отримання детальної інформації див. go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro

199

Ще одна річ, щоб переконатися, що у вас є наступний набір у web.config:

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

23
Це зробило це для мене. Спасибі
boca

5
Також вирішив це для мене. Дивно, що він працює локально у VS2010 IIS Express без цього налаштування.
Філ

8
Якщо ви не хочете встановлювати runAllManagedModulesForAllRequests(який працює навіть для статичних файлів), ви можете встановити виправлення Microsoft: microsoft.com/download/en/… .
Джастін Гельгерсон

10
Спробуйте уникнути цього, додавши модуль маршрутизації: britishdeveloper.co.uk/2010/06/…
Chris Herring

Якщо ви використовуєте VS2013 і намагаєтеся запустити на IIS 7.5 - вам потрібно додати це
KenL

77

Переконайтеся, що у вашому web.config є такий набір:

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

Краще рішення:

Незважаючи на те, що вищезгадане рішення працює абсолютно чудово , воно може спричинити інші проблеми, оскільки він запускає всі свої зареєстровані модулі HTTP на кожен запит (навіть на кожен запит .jpg .gif .gif. Натомість

<system.webServer>
<modules>
  <remove name="UrlRoutingModule-4.0"/>
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>

Переконайтеся, що атрибут preCondition порожній, це означає, що він працюватиме на всіх запитах. [Детальніше] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Читати оригінальну публікацію")


6
Це зафіксувало 403.14 в корені та 404 на інших методах контролера для мого додатка MVC. Однак тут є щось рибне, тому що у мене є ще одна програма, що працює на тому ж сервері з тими ж налаштуваннями видимого сайту, і вона працює без цього налаштування. Це web.config, створений за шаблоном SPA проекту з люб’язності VS 2012, який працює на моїй скриньці, але не публікується.
Шеннон

4
Так, так що мій пристрій розробки містив <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configі виглядав, що був модифікований на дату моєї установки VS 2012. Отже, наступне питання - що в моєму іншому проекті дозволяє йому функціонувати?
Шеннон

Зауважте, що, мабуть, не %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irрекомендовано верхнім рішенням, яке встановлює ті, які за замовчуванням повинні існувати на моєму пристрої розвитку. Ця команда не вирішує проблему для мене, як тільки я видаляю посилання UrlRoutingModule.
Шеннон

Це працює на Windows Server 2008 R2 IIS 7 для ASP.NET MVC 5. Дякую!
Ерві Б

42

Ще одна причина, чому хтось може отримати цю помилку - це те, що файл Global.asax вже не знаходиться в кореневій папці.


4
Так - інсталятор, про який я писав, не переніс цей файл. Дякую!
задам

4
Це була і моя проблема. Я б ніколи не здогадувався на підставі симптому 403, що в моїй заяві відсутня Global.asax
Саул Долгін

3
Виправлено це також для мене: вимкнено попередню компіляцію в параметрах публікації ( global.asaxце стосується лише файлу).
Річард

1
Це зробило для мене хитрість. Річ у тім, що для мене, і я чую, для багатьох інших, global.asax генерується кожного разу, коли я публікую публікацію. Хтось придумав спосіб її генерувати кожен раз?
Грег З.

Дякую, виправили мої проблеми. Додаток працює на ASP.NET MVC 4.0, Framework 4.0. Розташований на Арвіксе.
Джо Кінг

20

Я також отримував цю помилку і виявив, що "Перенаправлення HTTP" не було увімкнено в Windows Server. Цей пост у блозі також вказує на це: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx


6
З усіх проклятих, що це могло бути, це все. Я дивився скрізь і кілька годин грав із налаштуваннями безпеки, aspnet_regiis, і далі. Солодкий дитячий ісус на розсипчастому кайзерному рулоні.
Ендрю Беккер

Я витратив на це цілий день. Дуже дякую.
Pradeep

Для Windows 8 у мене все ж виникли помилки після ввімкнення перенаправлення HTTP. Довелося зробити це як другий крок: Додайте роль ASP.NET 4.5 у розділі Інформаційні послуги Інтернету -> Всесвітні веб-сервіси -> Особливості розробки додатків serverfault.com/questions/514091/…
dreamerkumar

Друга зупинка вирішила мою проблему. Деякі машини працюють без цього, але для інших це важливо. Дякую.
Олексій Хайдмейєр

15

Солодкий Ісусе. Я спробував усі вищеперелічені речі (але встановив, що мої настройки однакові). ІНШЕ РІШЕННЯ, якщо у вас виникли проблеми:

http://support.microsoft.com/kb/980368

Спробуйте встановити цей КБ для вашої системи. Якщо ви бачите 404, це може бути тому, що у вас немає цього оновлення - а модуль isapi просто не знайдеться, і без цього ви не можете багато чого зробити!


1
Вирішено для мене на 32-бітному сервері під керуванням Server 2008 SP2 (не R2)
Simon C


7

Для мене на Azure Server 2012 R2 IIS 8.5 VM з додатком Asp.Net MVC 5 (у бін розгорнуто MVC 5) мені довелося зробити наступне з піднесеного запиту cmd, хоча у мене вже встановлено 4.5:

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

Джерело: http://support.microsoft.com/kb/2736284

Я також встановив грубу силу, встановивши всі функції IIS із наступною PowerShell:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

Джерело: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Зараз мій додаток працює.


«Дисм» працював на мене (не застосовуючи жодних інших запропонованих змін). Мені просто довелося переключити перемикач "/ всі" до кінця, щоб переконатися, що всі "батьківські" функції також встановлені.
Джероен Рітмейєр

Це працювало для мене. Запуск MVC 5 з .NET 4.5 на Windows Server 2012. IIS за замовчуванням не встановить .NET 4.5.
DPac

6

Ми перенесли додаток MVC на новий сервер. .NET 4 та MVC 3 було встановлено, але ми все ще отримали “Помилка 403.14 ″. У цьому випадку це означало, що IIS не розуміє, що має справу з додатком MVC, шукає сторінку за замовчуванням.

Рішення було простим: перенаправлення HTTP не було встановлено на сервері.

Менеджер сервера - Ролі - Веб-сервер (IIS) - Ролеві послуги - Перенаправлення HTTP: Не встановлено. Встановив його, проблему вирішено.


1
що таке менеджер сервера? де я його знайду?
Елад Кац

Менеджер серверів знаходиться в Адміністративних інструментах
ут

5

Крім того, якщо ваш додаток попередньо складено, ви повинні мати його

PrecompiledApp.config

в кореневій папці вашого додатка, інакше ви також можете потрапити HTTP Error 403.14.


У мене був файл чомусь, хоча моя програма не є попередньою компіляцією. Файл видалено і він працює зараз. Дякую!
vaindil

Я був би дуже радий, якби побачив цю відповідь, перш ніж витратити 2 години і вирішити її самостійно ..
sotn

4

Ще одне можливе рішення, якщо ви рухаєтесь по своєму global.asax, переконайтеся, що розмітка вказує на правильний клас MvcApplication. Сподіваємось, це врятує когось у майбутньому.


4

Я використовував розширення WebDeploy IIS для імпорту моїх веб-сайтів з IIS6 в IIS7.5, тому всі налаштування IIS були такими, якими вони були у виробничому середовищі. Спробувавши всі запропоновані тут рішення, жодне з яких не працювало на мене, мені просто довелося змінити налаштування пулу додатків для веб-сайту з Classic на Integrated.


4

Я зіткнувся з тією ж проблемою 404.14 раптово. Нарешті, проблема була усунена, знявши прапорець "прекомпіляція під час публікації" в налаштуваннях профілю публікації.


Те ж саме. Видавництво до сьогодні не було жодних проблем - знявши прапорець. Дивно все одно
сер Руфо

4

Я змінив маршрут за замовчуванням в один момент з:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

До:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index" }

Що дало мені вашу помилку. Радий, що хтось згадав про маршрутизацію, тому що я, мабуть, був би на цьому вічно.


4

У моєму випадку ASP.NET 4.5 не встановлений на сервері, тому встановлення ASP.NET 4.5 усунула проблему.


4

Ви можете вирішити цю помилку, запустивши cmd як адміністратор ніж введіть тут опис зображення

Зробіть те саме, що на малюнку для Windows 32 біт

Просто внести зміни в 64 біт , як Framework64 замість рамок тільки не йти в IIS і оновити сайт
Якщо у ще є деякі помилки , внести зміни в пулі додатків


3

У мене виникла ще одна проблема, яка призвела до цього питання.

  • Я переконався, що мій пул додатків працює .net 4 в інтегрованому режимі
  • Я запустив aspnet_regiis.exe -i
  • Я перевірив, що дозволи на папки були встановлені правильно для облікового запису, в якому працює пул моїх програм

Жодна з цих речей не працювала. Виявилося, що в моєму web.config під system.webserver> модулями у мене було таке:

<remove name="WindowsAuthentication" />

Очевидно, що це видалило модуль аутентифікації Windows, який, здавалося, якимось чином збив усе кілтер.

Я сподіваюся, що це комусь допоможе, оскільки це коштувало мені більшу частину вечора!


3

Інтерфейс користувача дещо відрізняється в нових версіях Windows Server. Тут вам потрібно включити ASP.Net, щоб він працював над IIS

Виправити IIS та Asp.net


2

Додавання іншого рішення цього питання.

у моєму файлі Global.asax.cs я відключив спроби php-файлів від використання MVC-конвеєра, використовуючи наступне:

routes.IgnoreRoute( "{*php}" );

Я це робив раніше в проекті MVC2, і він працював чудово, але це робило в моєму додатку MVC 3, що викликало проблему, про яку повідомлялося вище.


2

Ще одна причина цього може статися - ваша RouteConfig.csчи WebApiConfig.csнедійсна.

У моєму випадку у мене був маршрут, визначений як такий (зверніть увагу на дужки замість фігурної дужки):

...
routeTemplate: "api/(something}"
...

Це працює для мене! У випадку, якщо я змінився routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Коли я встановив id = UrlParameter.Optionalна repositoryId = UrlParameter.Optionalній приступити до роботи!
Дмитреський

2

Зверніть увагу, що для користувачів Windows 8 вам потрібно додати / видалити компоненти Windows та видалити версію .net перезавантажити, а потім перевстановити для того, щоб зареєструвати її в IIS. Я припускаю, що це станеться, якщо ви отримаєте .net 4.5 з візуальної студії та встановите IIS згодом.


2

Як не дивно, як це може здатися, для мене працювала перевстановлення IIS , наступна команда виконується всередині папки версії .net:

aspnet_regiis.exe /i

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

Коли я вперше запустив цю команду, я почав отримувати помилку HTTP 403.14. Але одного разу я знову запустив команду, це вирішило проблему.

Висновки : Інша річ, яку я також зробив, - це видалити перенаправлення HTTP з функцій сервера на екрані управління сервером перед перевстановленням IIS. Можливо, це теж вплинуло на вирішення проблеми, але я не впевнений. Отже, якщо перевстановлення IIS все ще не працює, спробуйте видалити перенаправлення HTTP і повторіть спробу. Сподіваємось, це може працювати і для вас.


FYI aspnet_regiis.exeне встановлює та не перевстановлює IIS, він просто реєструє конкретну версію .NET Framework, так що IIS може бути використаний для розміщення програм.
Стефан

1

Щоб вирішити цю проблему, не вдаючись до 32-бітного режиму, вам доведеться оновити вихідний код цього проекту

public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
    // Enumerate assembly for UrlRoute attributes.
    List<MapRouteParams> routeParams = new List<MapRouteParams>();
    AppDomain.CurrentDomain.GetAssemblies()
        .ToList()
        .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));

Я підняв це питання як дискусію на дискусійній дошці в проекті кодового комплексу IT.

http://itcloud.codeplex.com/discussions/262000


1

Це працювало для мене, і це може бути корисним іншому.

Можливо, всі необхідні компоненти відсутні або / і не всі зареєстровані правильно. Щоб вирішити це, спробуйте зняти всі параметри всередині Панелі управління -> Увімкнути або вимкнути функції Windows -> Інформаційні послуги Інтернету -> Всесвітні веб-сервіси -> Функції розробки додатків, зніміть усі параметри та повторно встановіть прапорець, а потім скиньте IIS та перевірити, чи проблема вирішена.

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


1

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


0

Я створив нову область імен (і, отже, папку), ідентичний маршруту до контролера (наприклад, MvcApp/Test/SomeClasses.csі MvcApp/Controllers/TestController.cs). Це призвело і до 403,14!


0

Для мене рішенням було додати пакет NuGet Microsoft.AspNet.WebPages (плюс це залежності від Razor та інфраструктури) до мого веб-проекту.

Інфраструктуру довелося насильно перевстановити, оскільки вона спочатку не була додана в якості посилання.


0

У моєму випадку .NET CRL Версія в пулі додатків prppertires була встановлена ​​на Без керованого коду (не знаю чому). Встановивши його .NET CRL Версія v4.0.30319 вирішив проблему.

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