我在运行服务器端 Blazor 应用程序时在控制台中收到此消息:
错误:当前电路出现未处理的异常,所以 该电路将被终止。如需更多详细信息,请打开详细信息 “CircuitOptions.DetailedErrors”中的异常
我看过 Blazor 错误处理文档,但我不知道如何实际打开该消息中提到的详细错误?
对此进行更多挖掘表明,有两种非 Blazor 特定的 .NET Core 方法可以打开详细错误,还有一种 Blazor 特定的方法:
如 .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();
});
正如
Startup.cs
中添加
IWebHostEnvironment env
到你的构造函数中。然后你可以这样做:
services.AddServerSideBlazor().AddCircuitOptions(o =>
{
if (_env.IsDevelopment()) //only add details when debugging
{
o.DetailedErrors = true;
}
});
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
}
}
}
var builder = WebApplication.CreateBuilder(args);
if (builder.Environment.IsDevelopment())
{
builder.Services.AddServerSideBlazor().AddCircuitOptions(x => x.DetailedErrors = true);
}
else
{
builder.Services.AddServerSideBlazor();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseSetting(WebHostDefaults.DetailedErrorsKey, "true");
webBuilder.UseStartup<Startup>();
});