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

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

Есть идеи?

РЕДАКТИРОВАТЬ: Больше информации о ситуации. Сервер 32-битный, и у меня есть 4 других приложения MVC3, которые работают нормально. Это просто мое приложение MVC4, которое не работает.

18 ответов

Решение

Пытаться

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

С помощью

https://serverfault.com/questions/405395/unable-to-get-anything-except-403-from-a-net-4-5-website

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

  1. Вы настроили сайт как приложение в IIS
  2. У вас установлен.NET 4.5 на сервере
  3. Вы настроили пул приложений для запуска правильной версии.NET Framework (т.е. он не установлен на.NET 2.0
  4. Вы используете интегрированный конвейер в вашем пуле приложений
  5. .NET 4.5 фактически зарегистрирован в IIS. Пожалуйста, смотрите этот пост для аналогичного вопроса / решения

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

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

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

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

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

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

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

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

Существует ошибка Refactor -> Rename в 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 }
);

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

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

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

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

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 
 </system.webServer>

Вы можете использовать вышеуказанный код

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

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

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

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

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

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

Я использую 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 без переустановки, но, похоже, она больше не доступна.

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

  1. В диспетчере IIS в модулях я изменил наследование на локальное в узле UrlRoutingModule-4.0:

  2. В 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>
    

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

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

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

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

Либо я случайно изменил свой пул приложений .NET CLR Version на: No Managed Code, ИЛИ он был изменен, когда я изменил пул приложений для моего нового веб-приложения .NET 5, которое я развернул на том же сервере.

Изменение моей версии .NET CLR в пуле приложений на: .NET CLR Version v4.0.30319 устранило проблему.

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