Как отображать ошибки с ASP.NET Ядро

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

У меня есть довольно простой веб-сайт, с которым я играю, используя ASP.NET Ядро. Я запускаю приложение из командной строки, и веб-сайт возвращает статические файлы, но я продолжаю получать 500 ошибок при попытке отправить запрос, который должен обрабатываться MVC. Как мне увидеть, в чем заключается ошибка? Отображается ли ошибка в браузере или регистрируется на консоли, не имеет значения, я просто хочу способ увидеть, в чем заключается ошибка.

Ответ №1:

Добавьте промежуточное программное обеспечение страницы ошибок, как показано здесь:

 app.UseDeveloperExceptionPage();
  

Комментарии:

1. В каком пространстве имен находится UseErrorPage? Я добавил Microsoft. Собственный для моего asp.net веб-проект vnext, но нет UseErrorPage. Это то, что есть в MSDN msdn.microsoft.com/en-us/library/dn253556 (v = против113).aspx

2. Microsoft.AspNet.Diagnostics . Смотрите github.com/aspnet/Diagnostics/tree/dev/src /…

3. Эта опция удалена с beta5-6

4. @Highmastdon это вернулось? теперь это есть! docs.asp.net/en/latest/fundamentals/error-handling.html

5. !!Убедитесь, что app.UseDeveloperExceptionPage(); находится в САМОМ НАЧАЛЕ раздела Настройки Startup.cs!!

Ответ №2:

Обновление для beta8:
В beta8 Microsoft изменила название на UseDeveloperExceptionPage . Итак, если вы хотите использовать страницу ошибок, вызовите:

 app.UseDeveloperExceptionPage();
  

Вот ссылка на соответствующую проблему с Github.
ErrorPageOptions Они такие же, как в beta6 / 7.


Вы можете использовать

 app.UseErrorPage(ErrorPageOptions.ShowAll)
  

до beta5 из Asp.Net Mvc.


Начиная с beta6, ErrorPageOptions.ShowAll была удалена. Теперь вы можете использовать версию без параметров

 app.UseErrorPage();
  

или создайте объект ErrorPageOptions и укажите, сколько строк вокруг ошибки вы хотите отобразить, установив SourceCodeLineCount.

 app.UseErrorPage(new ErrorPageOptions() {SourceCodeLineCount = 100});
  

Дополнительная информация

Они удалили несколько свойств ErrorPageOptions в этом коммите.

Перед:

 public class ErrorPageOptions
{
    private bool _defaultVisibility;

    private bool? _showExceptionDetails;
    private bool? _showSourceCode;
    private bool? _showQuery;
    private bool? _showCookies;
    private bool? _showHeaders;
    private bool? _showEnvironment;
    ...
}
  

После:

 public class ErrorPageOptions
{
    public int SourceCodeLineCount { get; set; }
    public IFileProvider FileProvider { get; set; }
    ...
}
  

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

Комментарии:

1. Это должно быть изменено снова, поскольку я использую beta7, и у меня есть опции для showExceptionDetails, showSourceCode и т.д., А также SourceCodeLineCount

2. У вас есть? Вы уверены, что используете beta7? Я просмотрел его исходный код на Github несколько дней назад и нашел только код, который я разместил здесь. Но, тем не менее, я еще раз взгляну на это

3. @user2736022 Я проверил еще раз, у меня нет такой опции в beta7. Не могли бы вы опубликовать какой-нибудь код, в котором вы используете ErrorPageOptions и какие пространства имен вы включаете?

4. В бета-версии 8 и Visual studio 2015 это теперь добавляется по умолчанию в Startup.cs, если (env.IsDevelopment())

Ответ №3:

Если вас не волнует, что сведения о вашей ошибке будут доступны всему миру, вы можете включить сведения об ошибке прямо в браузере без каких-либо изменений кода. (Это было протестировано только в IIS 8.5 ):

  • В IIS Manager , в левой Connections части, щелкните левой кнопкой мыши выберите свой Site .
  • В правой части Feature View откройте Error Pages .
  • В крайнем правом Actions разделе нажмите на Edit Feature Settings
  • Затем в Error Responses выберите 2-й, Detailed errors Ok вариант (или, если вы беспокоитесь о том, чтобы выставить материал на всеобщее обозрение, начните с 3-го варианта, если вы можете открыть локальный браузер… т.е. localhost: …)

Этого должно быть достаточно, чтобы вы могли увидеть точную ошибку… Важно: Если вам пришлось использовать среднюю Detailed errors опцию, обязательно отключите ее после отладки проблемы. Это может дать хакеру все, что ему нужно для взлома вашего сервера.

Комментарии:

1. Это очень удобно, когда вам не нужно повторно развертывать свой сайт.

Ответ №4:

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

Просто добавьте <customErrors mode="Off"/> в <configuration> / <system.web> вашего файла web.config, расположенного в корневой папке вашего веб-сайта.

Для более подробного объяснения: Как использовать пользовательские ошибки Web.Config для ASP.NET

Преимущество этого в том, что вам не нужно повторно развертывать свой сайт

Комментарии:

1. Это не имеет отношения к вопросу OP. Он использует .NET Core, и ваш ответ для ASP.NET

2. Это также работает для ASP.Net настройки. web.config имеют приоритет. Я бы не стал этого делать, хотя это кажется плохой практикой… или, по крайней мере, уродливые.