如何打开 CircuitOptions.DetailedErrors?

问题描述 投票:0回答:5

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

错误:当前电路出现未处理的异常,所以 该电路将被终止。如需更多详细信息,请打开详细信息 “CircuitOptions.DetailedErrors”中的异常

我看过 Blazor 错误处理文档,但我不知道如何实际打开该消息中提到的详细错误?

c# asp.net-core blazor blazor-server-side
5个回答
70
投票

对此进行更多挖掘表明,有两种非 Blazor 特定的 .NET Core 方法可以打开详细错误,还有一种 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>();

如果您使用的是 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(); });

正如

下面@Eonasdan 的回答所强调的


19
投票
添加详细错误的更好方法是先检查您的环境。在

Startup.cs

 中添加 
IWebHostEnvironment env
 到你的构造函数中。

然后你可以这样做:

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

19
投票
无代码:更简单、更安全

最佳实践

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

Microsoft 建议将以下内容添加到

appsettings.development.json

 文件,因为它不会向应用程序添加可能成为安全风险的代码。不建议把它放在
appsettings.json
中,因为这个设置文件是为生产环境保留的。

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

src:

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 } } }
    

4
投票
对于 .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(); }
    

3
投票
对我来说略有不同

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true"); webBuilder.UseStartup<Startup>(); });
    
© www.soinside.com 2019 - 2024. All rights reserved.