如何开启CircuitOptions.DetailedErrors?

How to turn on CircuitOptions.DetailedErrors?

当 运行 服务器端 Blazor 应用程序时,我在控制台中收到此消息:

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'

我查看了 Blazor error handling documentation,但我不知道如何实际打开该消息中提到的详细错误?

对此进行更多挖掘表明,有两种非 Blazor 特定的 .NET Core 方法可以打开详细错误,还有一种 Blazor 特定的方法:

打开详细错误的通用 .NET Core 方法:

.NET Core documentation, but I ended up using the Detailed Errors setting:

中所述,有多种方法可以获取详细错误
WebHost.CreateDefaultBuilder(args).UseSetting(WebHostDefaults.DetailedErrorsKey, "true")

Development Environment setting:

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

这两个都用在 Program.cs:

如果您使用的是旧的(and eventually to be deprecated IWebHostBuilder 方法),它看起来像这样:

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

如果您使用的是 introduced with Core 2.1 的较新 IHostBuilder 方法,则看起来像这样:

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

作为

对我来说略有不同

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

添加详细错误的更好方法是先检查您的环境。在 Startup.cs 中将 IWebHostEnvironment env 添加到您的构造函数中。

那么你可以这样做:

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

更简单、更安全

这比大多数建议的解决方案更容易,并且不会在您的代码中引入可能的安全问题。

Microsoft 建议将以下内容添加到 appsettings.development.json 文件中,因为它不会向可能成为安全风险的应用程序添加代码。

此方法还为 SignalR 提供了详细的错误日志记录。

来源:Handle errors in ASP.NET Core Blazor apps: Detailed circuit errors

{
  "DetailedErrors": true, // turns on CircuitOptions.DetailedErrors
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.AspNetCore.SignalR": "Debug"  // turns on SignalR debugging
    }
  }
}

对于 .NET Core 6,您可以使用 WebApplicationBuilder。

var builder = WebApplication.CreateBuilder(args);
if (builder.Environment.IsDevelopment())
{
    builder.Services.AddServerSideBlazor().AddCircuitOptions(x => x.DetailedErrors = true);
}
else
{
    builder.Services.AddServerSideBlazor();
}