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)
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)
如果您使用的IHostBuilder是Core 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的特定方法:
也可以在此答案中找到另一种用于打开详细错误的方法,其中包括以下代码:
Run Code Online (Sandbox Code Playgroud)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; } });
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)
| 归档时间: |
|
| 查看次数: |
3487 次 |
| 最近记录: |