How to turn on CircuitOptions.DetailedErrors?

后端 未结 3 1860
耶瑟儿~
耶瑟儿~ 2021-02-12 00:43

I\'m getting this message in the console when running a server-side Blazor app:

Error: There was an unhandled exception on the current circuit, so this

相关标签:
3条回答
  • 2021-02-12 01:01

    More digging on this revealed that there are both non-Blazor specific .NET Core ways to turn on Detailed Errors, and also a Blazor specific approach:

    The general .NET Core way to turn on Detailed Errors:

    There are a number of ways to get the detailed errors as discussed in the .NET Core documentation, but I ended up using the Detailed Errors setting:

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

    And the Development Environment setting:

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

    Both of those are used in Program.cs:

    If you are using the older (and eventually to be deprecated IWebHostBuilder approach) that looks like this:

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

    And if you're using the newer IHostBuilder approach that was introduced with Core 2.1 that looks like this:

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

    Once I set that I got more details about my misfiring Blazor code.

    A Blazor specific approach:

    An alternative approach for turning on detailed errors can also be found in this answer, which includes this code:

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

    This approach can then be expanded to include a check for whether the code is being run in the development environment

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

    as highlighted by @Eonasdan's answer below

    0 讨论(0)
  • 2021-02-12 01:10

    For me it was slightly different

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
                webBuilder.UseStartup<Startup>();
            });
    
    0 讨论(0)
  • 2021-02-12 01:19

    A better way to add detailed errors is to check your environment first. In Startup.cs add IWebHostEnvironment env to your constructor.

    Then you can do this:

    services.AddServerSideBlazor().AddCircuitOptions(o =>
    {
        if (_env.IsDevelopment()) //only add details when debugging
        {
            o.DetailedErrors = true;
        }
    });
    
    0 讨论(0)
提交回复
热议问题