Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to turn on CircuitOptions.DetailedErrors?

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 circuit will be terminated. For more details turn on detailed exceptions in 'CircuitOptions.DetailedErrors'

I've had a look at the Blazor error handling documentation, but I can't work out how to actually turn on the detailed errors mentioned in that message?

like image 975
tomRedox Avatar asked Aug 15 '19 18:08

tomRedox


2 Answers

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 => {     //only add details when debugging     o.DetailedErrors = _env.IsDevelopment(); }); 

as highlighted by @Eonasdan's answer below

like image 64
tomRedox Avatar answered Oct 02 '22 17:10

tomRedox


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;
    }
});
like image 26
Eonasdan Avatar answered Oct 02 '22 16:10

Eonasdan