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


88

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

Любые идеи?

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


Я столкнулся с этой же проблемой, когда создал новое приложение веб-форм asp.net 4.5 . Он работал нормально локально (IIS 7.5), но при развертывании на тестовом сервере (также IIS 7.5) большинство моих связанных и миниатюрных файлов javascript и css не загружались с 404 Not Found. Ответ ниже о runAllManagedModulesForAllRequests решил проблему для меня!
ClearCloud8 02

Возможно, я ответил на этот вопрос по адресу: stackoverflow.com/questions/24343788/…
fsbf

<system.webServer> <modules runAllManagedModulesForAllRequests = "true" /> </system.webServer>
Джинто Джон

Ответы:


172

Пытаться

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

Через

/server/405395/unable-to-get-anything-except-403-from-a-net-4-5-website


1
Если бы это было сделано, все сделали, и по-прежнему работают только сайты MVC 4. Чтобы это сработало, должен быть какой-то другой трюк.
Максим В. Павлов

1
Этот. Пробовал все остальные стандартные решения без особой радости, но это было то, что помогло решить проблему.
Джулия Хейворд

1
Дорогой друг, я делаю это, но не получается. На самом деле, я работал с MVC 4 и VisualStudio 2012, мой проект работал хорошо до вчерашнего дня, но после некоторых обычных изменений в моих кодах эта ошибка появляется на странице по умолчанию (home / index). кто-нибудь может мне помочь? ..
А.Дара

4
Это исправление не подходит для этой проблемы (см. Ссылку в ответе Джейсона Купманса). гораздо лучше загрузить соответствующее исправление здесь microsoft.com/en-us/download/…
Ахмад Ибрагим,

@AhmadIbrahim, это на самом деле решение проблемы. Исправление только для 64-битной версии, вопрос четко указывает на 32-битную. Существуют определенные конфигурации, для которых RAMMFAR является наиболее надежным рабочим решением и добавляет минимальную нагрузку на сервер, если CDN используются надлежащим образом.
MarkKGreenway

22

Ошибка 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.


1. Я не настроил сайт как приложение. 2. У меня установлен .net 4.5, 3. мой пул приложений ориентирован на правильную структуру. 4. Мой пул был настроен на использование классического режима, изменил его на интегрированный, но это не помогло. 5. Я почти уверен, что 4.5 зарегистрирована.
mithun_daa

1
@mithun_daa - Если вы не настроили свой веб-сайт как приложение, это довольно просто -> щелкните правой кнопкой мыши виртуальный каталог / веб-сайт и преобразовать в приложение (или добавить приложение, терминология ускользает от меня в данный момент)
Томми

Это специфическая вещь для MVC4? Потому что я никогда не настраивал свои проекты MVC3 как приложения, и они работают нормально.
mithun_daa

Может быть, как вы затем развертываете -> но любое веб-приложение .NET должно быть установлено как приложение в IIS. Однако, если вы просто помещаете их на веб-сайт по умолчанию, тогда он работает под приложением веб-сайта по умолчанию. Убедитесь, что пул приложений веб-сайта по умолчанию настроен правильно (.NET 4 / интегрированный). Когда вы создаете виртуальный каталог / виртуальный веб-сайт в IIS, у вас также есть возможность настроить его для собственного приложения.
Tommy

Я, наверное, запутал вас, но ни один из сайтов не находится под веб-сайтом по умолчанию. Я щелкаю правой кнопкой мыши «Сайты» в IIS7 и выбираю «Добавить веб-сайт». Вот как я поступал.
mithun_daa

11

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

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

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


Если у вас это, возможно, основная причина заключается в наличии другой версии внешней библиотеки в производственной среде. У меня было приложение mvc, скомпилированное с более новой версией сторонней dll и более старой версией на производственном сервере ..
ValGe

За чудо-мальчик, ребенок, чудо-человек, феномен, неудержимость, король, за @Brian Kirkpatrick, дамы и господа,
Луис Вильярроэль

10

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

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

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


6

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

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


Это настоящий ответ. Благодарность!
Spivonious

5

В Visual Studio 2012 есть Refactor -> Rename Bug, который ошибочно переименовал «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 }
);

Для меня, я обнаружил давно , что я могу ввести nullдля nameпараметра избежать придумайте имя для каждого маршрута. Оказывается, это также иногда вызывает ошибку 403 (только в нашей среде prod, Win Server 2008 R2 с .NET 4.5.1, MVC 5 в проекте VS2013. Чтобы решить эту проблему, я добавил имя для каждого маршрута.
tristankoffee

2

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


2

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


Зачем публиковать один и тот же ответ в нескольких местах?
devnull

8
Потому что я пытался найти решение, и оно относится к обоим. Спасите кого-нибудь от охоты.
Mastro

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

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

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


1

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

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

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


0

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

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


Извините, но я не понял, что вы имели в виду. Это 32-битный сервер. Я обновил свой пост, чтобы добавить больше информации.
mithun_daa

Ааа ... Они в разных app_pools?
MarkKGreenway

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

0

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


0

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


0

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

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


0

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


0

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

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

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

0

В моем случае ни компоненты Windows, ни функции 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>
    

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.