ASP.NET MVC на IIS 7.5


338

Я использую Windows 7 Ultimate (64-разрядную версию) с использованием Visual Studio 2010 RC. Недавно я решил, что VS запускает / отлаживает мои приложения на IIS, а не на dev-сервере, который идет с ним.

Однако каждый раз, когда я пытаюсь запустить приложение MVC, я получаю следующую ошибку:

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

Информация об ошибках

Модуль DirectoryListingModule

Уведомление ExecuteRequestHandler

Ошибка обработчика статического файла

Код 0x00000000 Требуется

URL http: // localhost: 80 / mySite /

Физический путь C: \ myProject \ mySite \

Метод входа Анонимный вход

Пользователь Аноним

Я поместил default.aspxфайл в каталог, и я получил следующую ошибку:

Ошибка HTTP 500.21 - Внутренний обработчик ошибок сервера «PageHandlerFactory-Integrated» имеет неверный модуль «ManagedPipelineHandler» в своем списке модулей

Есть ли другие шаги, которые я забыл предпринять, чтобы заставить это работать?

Примечания: Я установил IIS 7.5 после установки VS 2010 RC. Я использовал встроенную кнопку «Создать виртуальный каталог» на вкладке «Веб» в «Свойствах» проекта MVC в Visual Studio 2010. Я убедился, что приложение использует пул приложений ASP.NET 4.

Ниже приведены установленные функции IIS у меня есть.

альтернативный текст


Хорошо, у меня есть похожая проблема, и она появляется только на сайтах 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.
— Умар Фарук Хаваджа

3
Кто-нибудь нашел решение этого на Windows 8 с IIS 8?
— Эрик Z Борода

3
Если вы используете Windows Server 2012 или окно 8, посмотрите это: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
— Lomak

Ответы:


499

ASP.NET 4 не был зарегистрирован в IIS. Пришлось запустить следующую команду в командной строке / запустить

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! это укусило меня в * сс. Я должен был установить 32-битную версию 4 или 5 раз без эффекта.
— Бен Леш

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

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

3
Если команда aspnet_regiis.exe отсутствует в папке рамочного .net, скачать полные рамки .net инсталлятор microsoft.com/download/en/...
— warrickh

11
Это не работает в IIS8, между прочим, если вы попытаетесь получить «Этот параметр не поддерживается в этой версии операционной системы. Администраторы должны вместо этого установить / удалить ASP.NET 4.5 с IIS8 с помощью« Включение / выключение функций Windows » диалоговое окно, средство управления диспетчером сервера или средство командной строки dism.exe. Дополнительные сведения см . на веб-сайте go.microsoft.com/fwlink/?LinkID=216771 . "
— Мастро

199

Еще одна вещь, которую нужно убедиться, это следующий набор в вашем файле web.config:

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

23
Это сделало это для меня. Спасибо
— Бока

5
И решил это за меня. Странно это работает локально в IIS Express VS2010 без этой настройки.
— Фил

8
Если вы не хотите устанавливать runAllManagedModulesForAllRequests(который работает даже для статических файлов), вы можете установить исправление Microsoft: microsoft.com/download/en/… .
— Джастин Хельгерсон

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

Если вы используете VS2013 и пытаетесь запустить на IIS 7.5 - вам нужно добавить это
— KenL

77

Убедитесь, что у вас есть следующий набор в вашем файле web.config:

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

Лучшее решение:

Несмотря на то, что вышеупомянутое решение работает абсолютно нормально , оно может вызвать другие проблемы, поскольку оно запускает все ваши зарегистрированные модули HTTP при каждом запросе (даже при каждом запросе .jpg .gif .css .html .pdf и т. Д.) И, очевидно, является пустой тратой ресурсов. Вместо

<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. Размещено на Arvixe.
— Джо Кинг,

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, и так далее. Сладкий младенец Иисус на рассыпчатом кайзер-ролле.
— Эндрю Бакер

Я потратил на это целый день. Огромное спасибо.
— Прадип

Для Windows 8 я все еще получал ошибки после включения HTTP Redirection. Это нужно было сделать в качестве второго шага: добавить роль ASP.NET 4.5 в разделе «Информационные службы Интернета» -> «Службы всемирной паутины» -> Функции разработки приложений serverfault.com/questions/514091/…
— dreamerkumar

Вторая остановка решила мою проблему. Некоторые машины работают без него, но для других это существенно. Спасибо.
— Алексис Хеймейер

15

Сладкий Иисус. Я перепробовал все вышеперечисленное (но мои настройки были идентичны). ЕЩЕ ДРУГОЕ РЕШЕНИЕ, если у вас возникли проблемы:

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

Попробуйте установить этот KB для вашей системы. Если вы видите 404, это может быть потому, что у вас нет этого обновления - и модуль isapi просто не найден, и вы ничего не можете с этим поделать!


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


7

Для меня на виртуальной машине Azure Server 2012 R2 IIS 8.5 с приложением Asp.Net MVC 5 (bin развернут MVC 5) мне нужно было сделать следующее из командной строки с повышенными привилегиями, хотя у меня уже была установлена ​​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/install-iis-85/install-iis-85-on-windows-server-2012-r2

Теперь мое приложение работает.


«Dism» работал на меня (без применения каких-либо других предложенных изменений). Мне просто нужно было переключить переключатель «/ all» до конца, чтобы убедиться, что все «родительские» функции также были установлены.
— Йерун Ритмейер

Это сработало для меня. Запуск 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
что такое диспетчер сервера? где я могу найти это?
— Elad Katz

Диспетчер серверов находится в Администрировании
— udog

5

Кроме того, если ваше приложение предварительно скомпилировано, вы должны иметь

PrecompiledApp.config

в корневой папке вашего приложения, в противном случае вы можете получить HTTP Error 403.14также.


У меня там был файл по какой-то причине, хотя мое приложение не скомпилировано. Удалил файл и теперь он работает. Спасибо!
— Вайнд

Я был бы очень рад, если бы увидел этот ответ, прежде чем потратить 2 часа и решить его самостоятельно ..
— Sotn

4

Другое возможное решение, если вы перемещаетесь по своему global.asax, убедитесь, что разметка указывает на правильный класс MvcApplication. Надеюсь, это спасет кого-то в будущем.


4

Я использовал расширение IIS WebDeploy для импорта своих веб-сайтов из 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 от visual studio и впоследствии установите IIS.


2

Как ни странно, переустановка IIS была тем, что сработало для меня, с помощью следующей команды, запущенной из папки версии .net:

aspnet_regiis.exe /i

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

Когда я впервые запустил эту команду, я начал получать ошибку HTTP 403.14. Но как только я снова запустил команду, это решило проблему.

Obs : Еще одна вещь, которую я также сделал, чтобы удалить переадресацию HTTP с функций сервера на экране управления сервером перед переустановкой IIS. Возможно, это также повлияло на решение проблемы, но я не уверен. Поэтому, если переустановка IIS все еще не работает, попробуйте удалить HTTP Redirect и попробуйте снова. Надеюсь, это может сработать и для вас.


FYI aspnet_regiis.exeне устанавливает и не переустанавливает IIS, он просто регистрирует конкретную версию платформы .NET, чтобы 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)));

Я поднял этот вопрос в качестве обсуждения на доске обсуждений в проекте ИТ-облачного кодекса.

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 и Infrastructure) в мой веб-проект.

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


0

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

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