Как включить CircuitOptions.DetailedErrors?

Я получаю это сообщение в консоли при запуске серверного приложения Blazor:

Ошибка: в текущей цепи возникло необработанное исключение, поэтому эта цепь будет прервана. Для получения дополнительных сведений включите подробные исключения в CircuitOptions.DetailedErrors.

Я взглянул на Blazor документация по обработке ошибок, но я не могу понять, как на самом деле включить подробные ошибки, упомянутые в этом сообщении?


person tomRedox    schedule 15.08.2019    source источник


Ответы (3)


Более подробное изучение этого вопроса показало, что существуют как способы включения подробных ошибок в .NET Core, не относящиеся к Blazor, так и подход, специфичный для Blazor:

Общий способ включения подробных ошибок в .NET Core:

Существует несколько способов получить подробную информацию об ошибках, как описано в . NET Core документации, но в итоге я использовал Подробная настройка ошибок:

WebHost.CreateDefaultBuilder(args).UseSetting(WebHostDefaults.DetailedErrorsKey, "true")

И параметр Среда разработки:

WebHost.CreateDefaultBuilder(args).UseEnvironment(Environments.Development)

Оба они используются в Program.cs:

Если вы используете старую версию (и, в конечном итоге, будет устаревшим подходом IWebHostBuilder), который выглядит следующим образом:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
        //.UseEnvironment(EnvironmentName.Development)
        .UseStartup<Startup>();

И если вы используете новый подход IHostBuilder, который был , представленный в Core 2.1, выглядит следующим образом:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder
                .UseStartup<Startup>()
                .UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
                //.UseEnvironment(EnvironmentName.Development);
        });

Как только я установил это, я получил более подробную информацию о моем пропуске зажигания кода Blazor.

Подход, специфичный для Blazor:

Альтернативный подход для включения подробных ошибок также можно найти в этом ответе, который включает этот код:

services.AddServerSideBlazor().AddCircuitOptions(options => {  options.DetailedErrors = true; });

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

services.AddServerSideBlazor().AddCircuitOptions(o =>
{
    if (_env.IsDevelopment()) //only add details when debugging
    {
        o.DetailedErrors = true;
    }
});

как выделено ответом @ Eonasdan ниже

person tomRedox    schedule 15.08.2019
comment
EnvironmentName.Development - person Simon Foster; 29.08.2019
comment
ой, я опубликовал слишком рано, собирался сказать, что VS рекомендует использовать Environments.Development, а не EnvironmentName.Development, который помечен как устаревший - person Simon Foster; 30.08.2019
comment
@SimonFoster, спасибо, я этого не заметил. Я обновил ответ, чтобы использовать это. - person tomRedox; 31.08.2019
comment
Это очень полезно. Другой подход может заключаться в том, чтобы просто #if ОТЛАДИТЬ дополнительную строку, чтобы отключить расширенные ошибки в сборке выпуска. - person Webreaper; 15.10.2019
comment
Как получить _env (IWebHostEnvironment) в методе ConfigureServices? - person hybrid2102; 16.10.2019
comment
В итоге я использовал метод ConfigureDevelopmentServices: docs.microsoft .com / en-us / aspnet / core / Основы / - person hybrid2102; 16.10.2019
comment
IHostBuilder не имеет .UseSetting метода. ???? - person BrainSlugs83; 08.11.2019
comment
@ BrainSlugs83, хороший момент, я добавил пример, в котором используется новый синтаксис IHostBuilder. Этот пример взят из нашего живого проекта, так что он должен работать. - person tomRedox; 08.11.2019
comment
Это отлично сработало для меня services.AddServerSideBlazor (). AddCircuitOptions (options = ›{options.DetailedErrors = true;}); - person Greg Trevellick; 05.07.2020
comment
Есть ли способ сделать это после компиляции кода? Я не могу найти Program.cs. - person LuVu; 10.02.2021
comment
@LuVu, насколько мне известно, нет. С каким типом проектов вы работаете (MVC, Blazor или что-то еще?) - person tomRedox; 10.02.2021
comment
Это проект C # .NET, использующий страницы Blazor. Я развернул его на сервере IIS. В моей среде разработки мое приложение работает нормально, но в процессе производства я получаю следующее сообщение в консоли: Ошибка: в текущей цепи возникло необработанное исключение, поэтому эта цепь будет прервана. Для получения дополнительных сведений включите подробные исключения, установив «DetailErrors: true» в «appSettings.Development.json» или установите «CircuitOptions.DetailedErrors». - person LuVu; 10.02.2021
comment
@LuVu обязательно должен быть файл Program.cs в корне вашего проекта веб-интерфейса - он содержит метод Main, который запускает приложение. Попробуйте выполнить глобальный поиск программы открытого класса - person tomRedox; 10.02.2021

Лучший способ добавить подробные ошибки - сначала проверить свою среду. В Startup.cs добавьте IWebHostEnvironment env в свой конструктор.

Тогда вы можете сделать это:

services.AddServerSideBlazor().AddCircuitOptions(o =>
{
    if (_env.IsDevelopment()) //only add details when debugging
    {
        o.DetailedErrors = true;
    }
});
person Eonasdan    schedule 17.09.2019
comment
Это действительно хороший момент и важный с точки зрения безопасности. Я соответствующим образом обновил свой ответ - person tomRedox; 17.09.2019

Для меня это было немного иначе

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
            webBuilder.UseStartup<Startup>();
        });
person Alvaro Rivoir    schedule 05.09.2019