Ошибка 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, из-за которого не разрешено перечислять содержимое каталога. Пожалуйста, будьте уверены, что
- Вы настроили сайт как приложение в IIS
- У вас установлен.NET 4.5 на сервере
- Вы настроили пул приложений для запуска правильной версии.NET Framework (т.е. он не установлен на.NET 2.0
- Вы используете интегрированный конвейер в вашем пуле приложений
- .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
не делал работу После нескольких часов копания в интернете я сделал собственное решение:
В диспетчере IIS в модулях я изменил наследование на локальное в узле UrlRoutingModule-4.0:
В 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 устранило проблему.