如何打开CircuitOptions.DetailedErrors?

tom*_*dox 14 c# asp.net-core blazor blazor-server-side

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

错误:当前电路中存在未处理的异常,因此该电路将被终止。有关更多详细信息,请在“ CircuitOptions.DetailedErrors”中打开详细的异常

我看过Blazor错误处理文档,但无法弄清楚如何真正打开该消息中提到的详细错误?

Tys*_*bby 46

无代码:更简单、更安全

最佳实践

这比大多数建议的解决方案更容易,并且不会在代码中引入可能的安全问题。它也被认为是编码最佳实践。

Microsoft 建议将以下内容添加到文件中 appsettings.development.json,因为它不会向应用程序添加可能构成安全风险的代码。不建议将其放入,appsettings.json因为此设置文件是为生产环境保留的。

您还可以使用此方法为 SignalR 提供详细的错误日志记录。

src:处理 ASP.NET Core Blazor 应用程序中的错误:详细电路错误

{
  "DetailedErrors": true, // turns on CircuitOptions.DetailedErrors
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.AspNetCore.SignalR": "Debug"  // turns on SignalR debugging
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案。 (3认同)

tom*_*dox 28

对此进行更深入的研究发现,不仅有非Blazor特定于.NET Core的方法来打开“详细错误”,而且还有Blazor特定于方法:

.NET Core启用“详细错误”的一般方法:

.NET Core文档中讨论了多种获取详细错误的方法,但最终我使用了“ 详细错误”设置

WebHost.CreateDefaultBuilder(args).UseSetting(WebHostDefaults.DetailedErrorsKey, "true")
Run Code Online (Sandbox Code Playgroud)

以及开发环境设置

WebHost.CreateDefaultBuilder(args).UseEnvironment(Environments.Development)
Run Code Online (Sandbox Code Playgroud)

两者都在Program.cs中使用:

如果您使用的是较旧的方法(最终将被弃用 IWebHostBuilder),则如下所示:

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

如果您使用的IHostBuilderCore 2.1引入的更新方法,则如下所示:

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

设置好之后,我会得到有关我未使用的Blazor代码的详细信息。

Blazor的特定方法:

也可以在此答案中找到另一种用于打开详细错误的方法,其中包括以下代码:

services.AddServerSideBlazor().AddCircuitOptions(options => {  options.DetailedErrors = true; });
Run Code Online (Sandbox Code Playgroud)

然后可以扩展此方法,以包括检查代码是否在开发环境中运行

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

下面@Eonasdan的回答突出


Eon*_*dan 7

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;
    }
});
Run Code Online (Sandbox Code Playgroud)