ASP.NET MVC на IIS 7.5

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

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

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

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

Модуль DirectoryListingModule

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

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

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

URL http://localhost/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 у меня есть.

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

28 ответов

Решение

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).

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

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

Убедитесь, что в вашем файле 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, "Читать оригинальный пост")

Другая причина, по которой кто-то может получить эту ошибку, заключается в том, что файл Global.asax больше не находится в корневой папке.

Я также получил эту ошибку и обнаружил, что "Перенаправление HTTP" не было включено в Windows Server. Это сообщение в блоге также указывает на это: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

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

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

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

Также вы можете переключить AppPool в интегрированный режим. Спасибо Майклу Бьянки ( /questions/13900787/aspnet-mvc-na-iis-75/13900804#13900804), я только хочу подчеркнуть это.

Для меня на виртуальной машине Azure Server 2012 R2 IIS 8.5 с приложением Asp.Net MVC 5 (bin развернут 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 на новый сервер. .NET 4 и MVC 3 были установлены, но мы все равно получили "Ошибка 403.14". В этом случае это означало, что IIS не понимал, что он имеет дело с приложением MVC, он искал страницу по умолчанию.

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

Диспетчер серверов - Роли - Веб-сервер (IIS) - Службы ролей - Перенаправление HTTP: не установлено. Установил, проблема решена.

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

PrecompiledApp.config

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

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

Я изменил свой маршрут по умолчанию в одной точке:

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" }

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

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

Вы можете решить эту ошибку, запустив cmd от имени администратора, чем

Сделайте так же, как на картинке для Windows 32 бит

Просто внесите изменения в 64-битной версии как framework64, а не только framework. Затем перейдите на iis и обновите сайт.
Если у вас все еще есть ошибка, внесите изменения в пул приложений

В моем случае ASP.NET 4.5 не установлен на сервере, поэтому установка ASP.NET 4.5 устранила проблему.

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

У меня была другая проблема, которая привела к этой проблеме.

  • Я убедился, что в моем пуле приложений запущен.net 4 в интегрированном режиме.
  • Я запустил aspnet_regiis.exe -i
  • Я проверил, правильно ли настроены разрешения для папки для учетной записи, в которой запущен мой пул

Ничего из этого не сработало. Оказалось, что в моем web.config под system.webserver> модулями у меня было следующее:

<remove name="WindowsAuthentication" />

Очевидно, это убрало модуль аутентификации Windows, который, казалось, каким-то образом сбил все с ног.

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

Пользовательский интерфейс немного отличается в более новых версиях Windows Server. Здесь вы должны включить ASP.Net, чтобы он работал на IIS

Исправить IIS & Asp.net

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

aspnet_regiis.exe /i

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

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

Добавление другого решения для этой проблемы.

в моем файле Global.asax.cs я отключил попытки использования php-файлов конвейером MVC с использованием следующего:

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

Я делал это ранее в проекте MVC2, и он работал нормально, но в моем приложении MVC 3 возникла проблема, о которой сообщалось выше.

Обратите внимание, что для пользователей Windows 8 вам необходимо добавить / удалить компоненты Windows и удалить версию перезагрузки.net, а затем переустановить, чтобы зарегистрировать ее в IIS. Я предполагаю, что это произойдет, если вы получите.net 4.5 от visual studio и впоследствии установите IIS.

Еще одна причина, по которой это может произойти - ваш RouteConfig.cs или же WebApiConfig.cs являются недействительными

В моем случае маршрут был определен как таковой (обратите внимание на круглые скобки вместо фигурных скобок):

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

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

Это сработало для меня, и это может быть полезно для другого.

Возможно, все необходимые компоненты отсутствуют или / и не все зарегистрированы правильно. Чтобы решить эту проблему, попробуйте снять все параметры в Панели управления -> Включить или отключить функции Windows -> Информационные службы Интернета -> Службы всемирной паутины -> Функции разработки приложений, снять все параметры и еще раз проверить все, затем сбросить IIS и проверьте, решена ли проблема.

Чтобы решить эту проблему, не прибегая к 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 Cloud Cloud Codeplex.

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

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

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

Для меня решением было добавить пакет NuGet Microsoft.AspNet.WebPages (плюс его зависимости Razor и Infrastructure) в мой веб-проект.

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

Другие вопросы по тегам