本文介绍 Blazor 如何管理未经处理的异常以及如何开发检测和处理错误的应用。
开发过程中的详细错误
当 Blazor 应用在开发过程中运行不正常时,从该应用接收详细的错误信息有助于故障排除和修复问题。 出现错误时,Blazor 应用会在屏幕底部显示一个黄色条框:
在开发过程中,黄色条框会将你定向到浏览器控制台,你可在其中查看异常。
在生产过程中,黄色条框会通知用户发生了错误,并建议刷新浏览器。
此错误处理体验的 UI 是 Blazor 项目模板的一部分。
在 Blazor WebAssembly 应用程序中,自定义wwwroot/index.html文件中的体验:
在 Blazor Server 应用程序中,自定义Pages/_Host文件中的体验:
An error has occurred. This application may no longer respond until reloaded.
An unhandled exception has occurred. See browser dev tools for details.
blazor-error-ui 元素被 Blazor 模板附带的样式隐藏,然后在发生错误时显示。
Blazor Server 应用如何响应未经处理的异常
BlazorServer 是有状态框架。 当用户与应用交互时,它们会保持与服务器(称为线路)的连接。 线路包含活动组件实例,以及状态的许多其他方面,例如:
最新呈现的组件输出。
客户端事件可触发的事件处理委托的当前集合。
如果用户在多个浏览器选项卡中打开应用程序,则它们具有多个独立的线路。
Blazor将最未经处理的异常视为致命的异常,并将其出现在线路上。 如果线路由于未经处理的异常而终止,则用户只可以通过重新加载页面来创建新线路,从而继续与应用进行交互。 已终止的线路(其他用户或其他浏览器选项卡的线路)不会受到影响。 这种情况类似于桌面应用程序崩溃—崩溃的应用程序必须重新启动,但其他应用不受影响。
当发生未处理的异常时,线路会终止,原因如下:
未经处理的异常通常使线路处于未定义状态。
无法在未处理的异常后确保应用的正常操作。
如果线路继续存在,则可能会在应用程序中出现安全漏洞。
在开发人员代码中管理未经处理的异常
若要使应用在出现错误后继续操作,应用必须具有错误处理逻辑。 本文后面的部分将介绍未经处理的异常的潜在来源。
在生产环境中,不要在 UI 中呈现框架异常消息或堆栈跟踪。 呈现异常消息或堆栈跟踪可以:
向最终用户公开敏感信息。
帮助恶意用户发现应用程序中可能会危及应用程序、服务器或网络安全的弱点。
使用永久性提供程序记录错误
如果发生未处理的异常,则会将异常记录到在服务容器中配置 ILogger 实例。 默认情况下,使用控制台日志记录提供程序 Blazor 应用日志输出到控制台输出。 请考虑使用管理日志大小和日志轮换的提供程序,将日志记录到更永久性的位置。
在开发过程中,Blazor 通常