ASP.NET MVC в IIS 7.5

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

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

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

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

Модуль DirectoryListingModule

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

Ошибка обработчика StaticFile

Код 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, которые у меня есть.

alt text


person Omar    schedule 03.03.2010    source источник
comment
Хорошо, у меня похожая проблема, и она проявляется только на веб-сайтах ASP.NET MVC 3. Веб-сайты ASP.NET MVC 2 работают нормально. Я поместил файл Default.aspx в корень веб-сайта, и все нормально, без проблем. Я развернул веб-сайт ASP.NET MVC 3, используя VS2010 SP1, и все еще без удовольствия. Я в своем уме, чтобы покончить с этим.   -  person Umar Farooq Khawaja    schedule 12.06.2011
comment
Вы убедились, что пул приложений для приложения MVC 3 установлен на .NET 4.0?   -  person Omar    schedule 12.06.2011
comment
Ага. Он установлен на 4.0 / Integrated. Я также запускал aspnet_regiis -ir.   -  person Umar Farooq Khawaja    schedule 12.06.2011
comment
У меня такая же проблема. Я настроил приложение на использование интегрированной версии 4.0, выполнил команду регистрации для регистрации .NET в IIS (7.5) и по-прежнему получаю эту ошибку.   -  person Collin White    schedule 14.06.2011
comment
Я, наконец, смог найти проблему в своей настройке, которая заключалась в том, что я переименовал файл _Layout.cshtml в _PageLayout.cshtml и также внес соответствующие изменения в _ViewStart.cshtml, но, очевидно, этого было недостаточно. Как только я вернул имя к _Layout.cshtml, все заработало. Что сбивало с толку, так это то, что _PageLayout.cshtml правильно подбирался на 32-битной Win7, но не был подобран на 64-битной Win7 или WinSvr2K8 R2.   -  person Umar Farooq Khawaja    schedule 15.06.2011
comment
Убедитесь, что вы запустили aspnet_regiis -i / aspnet_regiis -r, как указано ниже. Для удобства удалите существующий веб-сайт и пул приложений, если можете, и остановите IIS перед запуском команд. Вы также должны убедиться, что вы устанавливаете ASP.NET MVC 3 на сервер или Bin Deploy. Чтобы сделать это легко, вам понадобится VS2010 SP1. См. Мой первый ответ на этот вопрос stackoverflow.com/questions/5601325/asp-net-mvc3-in-iis-7-5, чтобы узнать, как это сделать.   -  person Umar Farooq Khawaja    schedule 15.06.2011
comment
Кто-нибудь нашел решение этого в Windows 8 с IIS 8?   -  person Eric Z Beard    schedule 02.10.2012
comment
Если вы работаете в Windows Server 2012 или в окне 8, посмотрите следующее: [stackoverflow.com/questions/12134713/ [1]: stackoverflow.com/questions/12134713/   -  person Lomak    schedule 02.04.2013
comment
Отключите олицетворение ASP.NET, и это тоже может решить проблему   -  person Greg Goldberg    schedule 25.06.2013
comment
Я обнаружил, что мне пришлось воссоздать свое приложение в IIS, чтобы оно тоже работало.   -  person Ben Power    schedule 25.10.2013


Ответы (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)

person Omar    schedule 04.03.2010
comment
Обратите внимание на 64 в Framework64 для 64-битной Windows! это укусило меня в * сс. Я, должно быть, устанавливал 32-битную версию 4 или 5 раз безрезультатно. - person Ben Lesh; 04.01.2011
comment
Как использовать эту команду на хостинге? Не могу запускать приложения на хостинге! - person Alexandre; 19.04.2011
comment
Если вы находитесь на общем хосте, вам необходимо связаться с вашим провайдером, чтобы он включил для вас .NET 4. - person Omar; 19.04.2011
comment
Версия .net изменилась с момента публикации этого ответа. Проверьте, какая версия платформы находится в каталоге %windir%\Microsoft.NET\Framework64, и соответствующим образом измените команду перед запуском (в настоящее время это v4.0.30319). - person David Murdoch; 22.04.2011
comment
to legendo - mucim se vec sat времени! :) - person Senad Uka; 23.02.2012
comment
чтобы добавить в @blesh, если у вас 64-разрядная версия и запущен 32-разрядный aspnet_regiis.exe, он может просто повторно показать вам параметры и ничего не делать - person xster; 03.05.2012
comment
Если команда aspnet_regiis.exe отсутствует в папке .NET Framework, загрузите полную версию установщика .NET Framework microsoft.com/download/en/ - person warrickh; 11.07.2012
comment
Это не работает в IIS8, кстати, если вы попытаетесь получить, эта опция не поддерживается в этой версии операционной системы. Вместо этого администраторам следует установить / удалить ASP.NET 4.5 с IIS8 с помощью диалогового окна «Включение / выключение компонентов Windows», средства управления Server Manager или средства командной строки DISM.exe. Дополнительные сведения см. На странице go.microsoft.com/fwlink/?LinkID=216771. . - person Mastro; 29.04.2014
comment
Большое спасибо :) - person Manoj Verma; 21.11.2016

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

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
person Mark Boltuc    schedule 23.06.2011
comment
Это сделало это для меня. Спасибо - person boca; 09.09.2011
comment
И решил это за меня. Странно, что он работает локально в VS2010 IIS Express без этой настройки. - person Phil; 10.11.2011
comment
Если вы не хотите устанавливать runAllManagedModulesForAllRequests (который работает даже для статических файлов), вы можете установить исправление Microsoft: microsoft.com/download/en/. - person Justin Helgerson; 17.04.2012
comment
Попытайтесь избежать этого, добавив модуль маршрутизации: britishdeveloper. co.uk/2010/06/ - person Chris Herring; 10.05.2013
comment
Если вы используете VS2013 и пытаетесь запустить IIS 7.5 - вам нужно добавить это - person KenL; 14.04.2014

Убедитесь, что в вашем 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, «Прочитать исходное сообщение»)

person Premchandra Singh    schedule 05.03.2013
comment
Это исправило 403,14 в корне и 404 в других методах контроллера для моего приложения MVC. Однако здесь все еще есть что-то подозрительное, потому что у меня есть другое приложение, работающее на том же сервере с теми же настройками видимого сайта, и оно работает без этого параметра. Это файл web.config, созданный шаблоном проекта SPA, любезно предоставленным VS 2012, который отлично работает в моем ящике, но не после публикации. - person shannon; 30.11.2013
comment
Да, поэтому мое устройство разработки содержало <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. Итак, следующий вопрос: что в моем другом проекте позволяет ему функционировать? - person shannon; 30.11.2013
comment
Обратите внимание, что это явно не %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -ir, рекомендованный лучшим решением, устанавливающим любые значения по умолчанию, которые должны существовать на моем устройстве разработки. Эта команда не решает для меня проблему после удаления ссылки UrlRoutingModule. - person shannon; 30.11.2013
comment
Это работает в Windows Server 2008 R2 IIS 7 для ASP.NET MVC 5. Спасибо! - person Ervi B; 09.03.2016

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

person ZippyV    schedule 13.09.2011
comment
Ага - программа установки, которую я написал, не принесла этот файл. Спасибо! - person zadam; 23.09.2011
comment
Это тоже была моя проблема. Я бы никогда не догадался, основываясь на симптоме 403, что в моем приложении отсутствует файл Global.asax. - person Saul Dolgin; 28.06.2013
comment
Также исправлено для меня: отключена предварительная компиляция в параметрах публикации (global.asax затрагивает только файл). - person Richard; 15.10.2014
comment
Это помогло мне. Дело в том, что для меня, и я слышал от многих других, global.asax генерируется каждый ДРУГОЙ раз, когда я публикуюсь. Кто-нибудь придумал способ генерировать его каждый раз? - person Greg Z.; 19.05.2015
comment
Спасибо, исправил мои проблемы. Приложение работает на ASP.NET MVC 4.0, Framework 4.0. Размещено на Arvixe. - person Joe King; 14.07.2015
comment
В моем случае с веб-сайтом, а не с веб-приложением, файл Global.asax должен был указывать CodeFile = Global.asax.cs, а не CodeBehind = Global.asax.cs. Пользовательский интерфейс VS как бы боролся со мной, чтобы помешать его созданию должным образом, вероятно, потому, что я делал сайт с нуля, а не использовал шаблон. - person Jordan Rieger; 30.01.2016

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

person toddkitta    schedule 21.10.2011

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

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

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

person Sean Anderson    schedule 27.01.2012
comment
Решено для меня на 32-битном сервере под управлением Server 2008 SP2 (не R2) - person Simon C; 27.03.2014

Также вы можете переключить AppPool в режим Интегрированный. Спасибо Майклу Бьянки (https://stackoverflow.com/a/7956546/1143515), я только хочу подчеркнуть, что .

person Kalyan00    schedule 11.01.2012

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

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

person Jon Kragh    schedule 25.07.2014
comment
Один из них сработал для меня (без применения каких-либо других предложенных изменений). Мне просто пришлось переключить переключатель «/ all» в конец, чтобы убедиться, что все «родительские» функции также были установлены. - person Jeroen Ritmeijer; 08.06.2016
comment
Это сработало для меня. Запуск MVC 5 с .NET 4.5 на Windows Server 2012. IIS по умолчанию не устанавливает .NET 4.5. - person DPac; 10.12.2016

У нас было перенесено приложение MVC на новый сервер. .NET 4 и MVC 3 были установлены, но мы все равно получили «Ошибка 403.14». В данном случае это означало, что IIS не понимал, что имеет дело с приложением MVC, а искал страницу по умолчанию.

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

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

person Bjarne Havnen    schedule 04.03.2013
comment
что такое диспетчер серверов? где мне это найти? - person Elad Katz; 01.03.2015
comment
Диспетчер серверов находится в административных инструментах. - person udog; 19.06.2015

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

PrecompiledApp.config

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

person pvasek    schedule 26.09.2012
comment
По какой-то причине у меня был файл, хотя мое приложение не было предварительно скомпилировано. Удалил файл, теперь он работает. Спасибо! - person vaindil; 08.02.2016
comment
Я был бы очень рад, если бы увидел этот ответ, прежде чем потратил 2 часа на его решение самостоятельно .. - person sotn; 14.01.2017

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

person AaronHS    schedule 28.10.2011

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

person Michael Bianchi    schedule 31.10.2011

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

person user985287    schedule 17.07.2013
comment
То же самое. До сегодняшнего дня публикация не была проблемой - снятие флажка решило ее. Все равно странно - person Sir Rufo; 09.05.2016

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

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

To:

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

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

person Nate-Wilkins    schedule 23.09.2013

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

person Saif    schedule 21.10.2013

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

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

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

person Community    schedule 06.05.2015

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

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

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

<remove name="WindowsAuthentication" />

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

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

person Paul Suart    schedule 13.02.2013

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

aspnet_regiis.exe /i

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

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

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

person Ulysses Alves    schedule 29.06.2015
comment
FYI aspnet_regiis.exe не устанавливает и не переустанавливает IIS, он просто регистрирует конкретную версию .NET framework, чтобы IIS мог использовать ее для размещения приложений. - person stephen; 05.10.2015

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

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

person Matthew Zourelias    schedule 29.11.2017

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

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

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

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

person TheRightChoyce    schedule 27.09.2011

Это может произойти еще по одной причине - ваши RouteConfig.cs или WebApiConfig.cs недействительны.

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

...
routeTemplate: "api/(something}"
...
person Terry    schedule 24.07.2013
comment
Меня устраивает! На случай, если я изменил routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Когда я установил id = UrlParameter.Optional на repositoryId = UrlParameter.Optional, оно начало работать! - person Dmitresky; 01.10.2014

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

person Lee.Winter    schedule 07.08.2013

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

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

person Community    schedule 20.06.2011

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

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

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

person MirlvsMaximvs    schedule 07.08.2015

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

person Mastro    schedule 29.04.2014

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

person Papa Mufflon    schedule 15.04.2015

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

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

person Mathieu Diepman    schedule 31.08.2016

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

person Eugene Rozhkov    schedule 30.11.2016