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 больше не находится в корневой папке.

ZippyV
источник
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

toddkitta
источник
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также.

pvasek
источник
У меня там был файл по какой-то причине, хотя мое приложение не скомпилировано. Удалил файл и теперь он работает. Спасибо!
Вайнд
Я был бы очень рад, если бы увидел этот ответ, прежде чем потратить 2 часа и решить его самостоятельно ..
Sotn
4

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

AaronHS
источник
4

Я использовал расширение IIS WebDeploy для импорта своих веб-сайтов из IIS6 в IIS7.5, поэтому все параметры IIS были такими же, как и в производственной среде. Попробовав все представленные здесь решения, ни одно из которых не сработало для меня, мне просто пришлось изменить настройку пула приложений для веб-сайта с Classic на Integrated.

Майкл Бьянки
источник
4

Я внезапно столкнулся с той же проблемой 404.14. Наконец, проблема была исправлена ​​снятием флажка «прекомпилировать во время публикации» в настройках профиля публикации.

user985287
источник
Тоже самое. Публикация не была проблемой до сегодняшнего дня - снятие галочки решило ее. Странно, в любом случае
сэр Руфо
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" }

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

Nate-Wilkins
источник
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 вызвало проблему, описанную выше.

TheRightChoyce
источник
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.

Lee.Winter
источник
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 и проверьте, решена ли проблема.

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

MirlvsMaximvs
источник
1

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

Mastro
источник
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 решила проблему.

Евгений Рожков
источник