Ошибка HTTP MVC4 403.14 - Запрещено

Я создал веб-приложение ASP.NET MVC4.net4.5, которое отлично работает локально (IIS Express и dev-сервер), но как только я развожу его на свой веб-сервер, он выдает ошибку 403. Я установил .Net 4.5RC на сервер и даже попробовал aspnet_regiis -i бит, который все рекомендовали для своих проблем с предыдущими версиями MVC/.Net, но это не помогло.

Любые идеи?

ИЗМЕНИТЬ: Подробнее о ситуации. Сервер 32-битный, и у меня есть еще 4 приложения MVC3, которые работают нормально. Это просто мое приложение MVC4, которое не работает.

Ответ 2

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

  • Вы настроили веб-сайт как приложение в IIS
  • У вас установлен .NET 4.5 на сервере
  • Вы установили пул приложений для запуска правильной версии   .NET framework (то есть он не установлен в .NET 2.0
  • Вы используете интегрированный конвейер в пуле приложений
  • .NET 4.5 фактически зарегистрирован в IIS. Пожалуйста, см. этот пост для аналогичной проблемы/резолюции

Обычно a и d являются самыми большими проблемами, связанными с развертыванием MVC в IIS

Ответ 3

Возможно... Если вам придётся использовать мастер публикации (как и я) и установите флажок "Прекомпилировать во время публикации" (как и я) и увидим те же симптомы...

Да, я избил себя над головой, но, сняв флажок, похоже, несвязанная настройка, все описанные симптомы уходят после перераспределения.

Надеюсь, это исправит некоторых людей.

Ответ 4

Windows- > Пуск → Включение и выключение функций вложений

Убедитесь, что вы указали необходимые параметры в

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

Ответ 5

Перед применением

runAllManagedModulesForAllRequests="true"/>

рассмотрим приведенную ниже ссылку, которая предлагает менее радикальную альтернативу. В сообщении автор предлагает следующее изменение локальному web.config:

  <system.webServer>
    <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

Ответ 6

Существует Refactor → Переименуйте ошибку в Visual Studio 2012, которая неправильно переименовала "id" внутри литерального строкового значения параметра url в моем RouteConfig.cs. Это вызвало 403.14 в новой и в противном случае правильной настройке как в Windows Server 2012, так и в Windows Server 2008 R2.

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

был изменен на

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{renamed_text}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

Ответ 7

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

Ответ 8

Вы также можете получить 403, если при тестировании с помощью dev-сервера вы используете интегрированный конвейер, а затем установите в качестве классического режима конвейера на своем реальном веб-сервере IIS 7.5, также мне не хватает папки app_data, которая также потребовалась

Ответ 9

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

U может использовать код выше

Ответ 10

Я установил новый пул приложений приложений в DefaultAppPool в IIS, который, очевидно, использует конвейер Classic с .NET v.2.0.

Чтобы решить проблему, я создал новый пул приложений, используя конвейер Integrated и .NET v4.0. просто для этого нового приложения, а затем все приступило к работе, как ожидалось.

Не забудьте назначить этот новый пул приложений для приложения. Выберите приложение в IIS, нажмите Basic Settings, а затем выберите новый пул приложений для приложения.

Ответ 11

тот, который я вижу чаще всего, - это IIS и позволяет запускать 32-битные приложения

Это то, что вы пробовали. в противном случае нам нужна дополнительная информация о версиях продуктов и dev-серверов.

Ответ 12

У меня немного другая проблема, на сервере 2012 почему-то я забыл включить asp.net 4.5, поэтому, если у вас есть эта проблема, дважды проверьте, что вы ее включили.

Ответ 13

Я запускаю Windows Server 2012 R2 на Azure и ASP.NET 4.5, IIS 8

Я решил эту проблему, удалив все элементы ASP.NET в "Программы и компоненты", а затем переустановив ASP.NET, как это, с помощью "Диспетчер серверов" с помощью "Добавить роли и функции": выбрана установка на основе ролей или на основе компонентов, выбран мой сервер, а затем для выбранного сервера, выбранного веб-сервера (IIS)/веб-сервера/разработки приложений, затем щелкните ASP.NET 4.5, подтвердите установку необходимого условия и затем переустановите ASP.NET 4.5.

Мои предыдущие поисковые запросы заставили меня поверить, что проблема связана с проблемой регистрации с ASP.NET. С более ранними версиями ASP.NET на самом деле есть утилита, которую вы можете запустить для регистрации ASP.NET без переустановки, но она больше не доступна.

Ответ 14

Я решаю проблему, открывая визуальную студию, расширяя ссылки и меняя свойство "Копировать локальное" на "True".

Я обнаружил это, сравнивая DLL старой версии с Dll моей новой версии (которая не работала)

Ответ 15

В моем случае моей страницей по умолчанию для приложения был index.html, отсутствующий в параметрах документа по умолчанию. При добавлении исправлено 403.14 Запрещенная ошибка.

Ответ 16

В моем случае проблема была вызвана пользовательским ActionFilterAttribute, который был своего рода глобальным атрибутом фильтра. Атрибут создавал службу через Autofac, но служба разбилась на конструктор:

public ActionFilterAttribute()
{
    _service = ContainerManager.Resolve<IService>();
}

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}

Ответ 17

В моем случае ни функции Windows, ни aspnet_regiis -i не выполняли эту работу. После нескольких часов работы в Интернете я сделал свое решение:

  • В диспетчере IIS в модулях я изменил наследование на локальный в UrlRoutingModule-4.0 node: введите описание изображения здесь

  • В web.config я вставлял несколько советов с этого форума:

<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="UrlRoutingModule-4.0"></remove> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""></add> </modules> </system.webServer>

Надеюсь, что это поможет