CustomErrors mode = «Off»

233

Я получаю сообщение об ошибке каждый раз, когда я загружаю свой webapp провайдеру. Из-за режима customErrors все, что я вижу, является сообщением по умолчанию "Ошибка выполнения", в котором указывается, что я должен отключить customErrors, чтобы больше узнать об ошибке.

Ожидаемый, я установил свой web.config таким образом:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

и, тем не менее, все, что я получаю, это глупая страница удаленных ошибок, на которой нет полезной информации. Что еще я могу сделать, чтобы отключить customErrors!?

  • 1
    попробуйте добавить @Model.Exception.Message в Shared/Error.cshtml
  • 0
    В общем, следите за преобразованиями конфигурации (например, Web.Debug.config, который может изменить это значение), и следите за дублирующими определениями этого раздела / свойства в файле (в данном случае это явно не проблема)
Теги:

29 ответов

142
Лучший ответ

Это заставляло меня сумасшедшим в течение последних нескольких дней и не могло обойти его, но, наконец, выяснилось:

В моем файле machine.config у меня была запись под <system.web>:

<deployment retail="true" />

Это, похоже, отменяет любые другие параметры customError, которые вы указали в файле web.config, поэтому для установки вышеприведенной записи:

<deployment retail="false" />

теперь означает, что я могу еще раз увидеть подробные сообщения об ошибках, которые мне нужны.

machine.config находится в

32-битный

%windir%\Microsoft.NET\Framework\[version]\config\machine.config

64-битный

%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 

Надеюсь, что помогает кому-то там и экономит несколько часов натягивания волос.

  • 0
    Хорошая точка зрения. Тем не менее, лучше всего вернуться в режим розничной торговли, когда вы закончите (или отключить режим отладки в web.config, что будет раздражать вашу машину для разработки). См. Weblogs.asp.net/lasse/archive/2009/04/28/…
  • 0
    Похоже, что это настройка по умолчанию в .NET 4.0 - у меня возникла та же проблема с ее выяснением. Согласитесь, что это хорошая настройка для использования в производственной среде, но очень важно видеть ошибку REAL при отладке.
130

"Выкл." чувствителен к регистру.

Проверьте, что "O" находится в верхнем регистре в файле web.config, я несколько раз потерпел (как это просто звучит)

  • 2
    Недостаточно просто сказать спасибо!
  • 2
    Рад, что мой ответ от десяти лет назад помог вам @ user230910! знак равно
Показать ещё 1 комментарий
49

В интересах добавления большего количества ситуаций к этому вопросу (потому что именно там я смотрел, потому что у меня была такая же проблема), вот мой ответ:

В моем случае я вырезал/вставлял текст из общей ошибки, говорящей фактически, если вы хотите увидеть, что неправильно, поместите

<system.web>
   <customErrors mode="Off"/>
</system.web>

Итак, это должно было исправить это, но, конечно, нет! Моя проблема заключалась в том, что был < system.web > node несколько строк выше (перед компиляцией и аутентификацией node) и закрывающий тег </system.web > несколько строк ниже. Как только я исправил это, ОК, проблема решена. То, что я должен был сделать, это скопировать/вставить только эту строку:

<customErrors mode="Off"/>

Это из летописей тупых вещей, которые я продолжаю делать снова и снова. В главе "Копировать и вставить свой путь к уничтожению".

  • 0
    Вопрос: Этот ответ подразумевает, что ASP читает web.config и другие файлы конфигурации сверху, т. Е. Сверху вниз. Я думал, что файлы конфигурации были прочитаны как «единый экземпляр», что означает, что компилятор сначала анализирует файл конфигурации на точность, а затем компилирует его, но, похоже, он компилирует его на лету - строка за строкой. Это правда?
  • 0
    @ Fernando68, это лучше поставить отдельным вопросом - обсуждение в комментариях не совсем оптимально. Я не инженер .NET, но, очевидно, .NET не компилирует его построчно. Это XML-файл, поэтому он иерархический. Но если иерархия плохо сформирована, синтаксический анализатор Xml выдает исключение при его анализе. Другими словами, он должен взять весь Xml-файл целиком, но если он обнаруживает плохой Xml-файл, он вообще не может создать требуемый объект!
Показать ещё 1 комментарий
10

Для приложений Sharepoint 2010 вы также должны отредактировать C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\web.config и определить <customErrors mode="Off" />

7

Один ответ, который действительно работал, чтобы исправить это, я нашел здесь: https://stackoverflow.com/questions/18291550/404-handling-in-azure-website

Просто добавьте это в свой web.config:

<configuration>  
  <system.webServer>  
    <httpErrors existingResponse="PassThrough"/>  
  </system.webServer>  
<configuration>
  • 2
    Я обнаружил, что <httpErrors errorMode="Detailed" /> дал мне всю необходимую информацию`
6

Я пробовал большую часть описанного здесь материала. Я использовал VWD, а файл web.config по умолчанию:

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>

Я изменил режим = "RemoteOnly" в режим = "Выкл.". Еще нет радости. Затем я использовал диспетчер IIS, свойства, вкладку ASP.Net, "Изменить конфигурацию", затем выбрал вкладку CustomeErrors. Это все еще показало RemoteOnly. Я изменил это на Off и, наконец, я смог увидеть подробные сообщения об ошибках.

Когда я осмотрел web.config, я увидел, что в system.web есть два узла CustomErrors; и я только что заметил, что вторая запись (та, которую я менял, была внутри комментария). Поэтому старайтесь не использовать блокнот для проверки web.config на удаленном сервере.

Однако, если вы используете файл конфигурации редактирования IIS, он будет жаловаться на ошибки в web.config. Тогда вы можете исключить все ответы, в которых говорится: "Есть ли синтаксическая ошибка XML в вашем web.config"

  • 0
    Изменение web.config на уровне веб-сайта работало для меня. Ранее я возился с загрузкой файла приложения web.config. Спасибо!
6

Обычно вы можете найти дополнительную информацию об ошибке в средстве просмотра событий, если у вас есть к ней доступ. Ваш провайдер также может запретить отображение пользовательских ошибок вообще, либо переопределив его в файле machine.config, либо установив атрибут retail в true (http://msdn.microsoft.com/en-us/library/ms228298(VS.80).aspx).

5

Моя проблема заключалась в том, что я определил это в моем web.config

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" />
  <remove statusCode="500" />
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
  <error statusCode="500" responseMode="ExecuteURL" path="/Error/Internal" />
</httpErrors>
  • 2
    В качестве примера помогает замена на <httpErrors errorMode="Detailed"
5

У меня также была эта проблема, но при использовании Apache и mod_mono. Для всех остальных в этой ситуации вам необходимо перезапустить Apache после изменения web.config, чтобы заставить новую версию читать.

5

Если вы по-прежнему получаете эту страницу, вероятно, она взорвалась, прежде чем пройти через Web.Config

Убедитесь, что ASP.Net имеет разрешения, необходимые для таких вещей, как папки .Net Framework, метабаза IIS и т.д. Есть ли у вас какой-либо способ проверить, правильно ли установлен ASP.Net и правильно ли он связан с IIS?

Редактировать: После того, как Грег прокомментировал это, я предположил, что то, что вы опубликовали, было вашим очень минимальным web.config, есть что-то еще? Если да, можете ли вы опубликовать весь web.config?

  • 0
    Несколько раз, когда я сталкивался с этой проблемой, это было ошибкой в web.config - определенно сначала пройдите ее с гребнем с мелкими зубьями.
  • 0
    Да, доволен, я переопределил мой web.config к этим минимальным настройкам. Все еще нет радости
Показать ещё 2 комментария
2

Мы также столкнулись с этой ошибкой, и в нашем случае это произошло потому, что пользователь пула приложений больше не имел прав доступа к файлу web.config. Причина, по которой он потерял свои права (все было хорошо до этого), состояло в том, что у нас была резервная копия сайта в rar файле, и я перетащил резервную версию web.config из rar на сайт. Кажется, что удалены все разрешения для файла web.config, кроме меня, зарегистрированного пользователя.

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

2

У нас была эта проблема, и это произошло из-за того, что пользователь IIS не имел доступа к конфигурации компьютера на веб-сервере.

2

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

1

У меня была такая же проблема, но я нашел решение по-другому.

-

Что я сделал, я открыл Дополнительные настройки для Пула приложений в Диспетчере IIS.

Там я установил Включить 32-разрядные приложения на True.

1

Я только что занимался подобной проблемой. В моем случае версия asp.net по умолчанию для сайта была 1.1, в то время как я пытался запустить веб-приложение 2.0. Ошибка была довольно тривиальной, но не сразу стало понятно, почему пользовательские ошибки не исчезнут, а время выполнения никогда не записывается в журнал событий. Очевидное исправление должно соответствовать версии на вкладке Asp.Net IIS.

  • 0
    у нас была такая же проблема. Узел "connectionstrings" вызывал ошибку в рамках 1.1, тогда как приложение должно было быть 2.0
1

Вы также можете попробовать открыть веб-сайт в браузере на серверной машине. Я не занимаюсь разработкой ASP.NET, но помню, что в настройках пользовательских ошибок есть параметр для отображения полного текста ошибки на сервере в качестве меры безопасности.

1

Это веб-приложение установлено под любыми другими приложениями в дереве каталогов веб-сайта? Проверьте любые родительские файлы web.config для других параметров, если они есть. Кроме того, сделайте свой каталог установленным как каталог приложения в IIS.

1

Если вы используете предварительный просмотр MVC 4, вы можете столкнуться с этим, потому что используете HandleErrorAttribute. Поведение изменилось в 5, так что оно не обрабатывает исключения, если вы отключите пользовательские ошибки.

1

Есть ли у вас какой-либо особый символ, например æøå в вашем web.config? Если это так, убедитесь, что для кодировки установлено значение utf-8.

1

Попробуйте перезапустить приложение (создание app_offline.htm, чем его удаление), и если вы все равно получите одно и то же сообщение об ошибке, убедитесь, что вы только объявили customErrors один раз в файле web.config или что-то в этом роде. Ошибки в файле web.config могут иметь какое-то странное влияние на приложение.

  • 1
    каждый раз, когда вы изменяете web.config, веб-сайт перезапускается, нет необходимости создавать app_offline.htm!
  • 0
    правда, я не знаю, почему я предложил app_offline для сброса приложения. :)
0

Для меня это была ошибка выше в web.config над system.web.

файл, бла, не существовал, поэтому в тот момент он выдавал ошибку. Поскольку он еще не попал в раздел System.Web, он использовал настройку сервера по умолчанию для CUstomErrors (On)

  • 0
    (Похоже, что это сообщение не дает качественного ответа на вопрос. Пожалуйста, либо отредактируйте свой ответ и улучшите его, либо просто опубликуйте как комментарий к вопросу.)
0

Это действительно странно. Я получил эту ошибку и после перезагрузки моего сервера он исчез.

0

В некоторых случаях также возможно, что web.config не отформатирован правильно. В этом случае вам придется пройти через линию, чтобы она работала. Часто правила перезаписи являются виновниками здесь.

0

У меня была такая же проблема, и я просмотрел журнал приложений для просмотра событий, где он четко упоминает, из-за чего это исключение. В моем случае исключение было следующим:

Информация об исключении:

Exception type: HttpException 
Exception message: The target principal name is incorrect.  Cannot generate SSPI context.
at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

The target principal name is incorrect.  Cannot generate SSPI context.

Я только что обновил свой пароль в пуле приложений, и он работает для меня.

0

Попробовав все ответы здесь, оказалось, что мой метод Application_Error имел это:

Server.ClearError();
Response.Redirect("/Home/Error");

Удаление этих строк и установка исправили проблему. (Клиент по-прежнему перенаправляется на страницу с ошибкой customErrors="On").

0

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

<compilation xdt:Transform="RemoveAttributes(debug)" />
0

Также убедитесь, что вы редактируете web.config, а не website.config, как и я.

0

Убедитесь, что вы добавили    сразу после system.web

Я положил его в конец node и не работал.

0

У меня была та же проблема, и причина в том, что в IIS был запущен ASP.NET 1.1, а на сайте -.NET 2.0.

Сообщение об ошибке ничего не делало, но меня выкидывало несколько часов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню