具有当前 URL 信息的 Blazor 全局异常处理程序

Dej*_*lar 5 c# blazor .net-6.0

我想在 Blazor 服务器应用程序中发生未处理的异常时记录浏览器中设置的 URL 。

我使用 Serilog 进行日志记录,还使用请求日志记录中间件。

builder.Host.UseSerilog();
app.UseSerilogRequestLogging;
Run Code Online (Sandbox Code Playgroud)

但这还不够,因为只有一个 HTTP 请求,然后 Blazor SignalR 连接就会打开。因此,Serilog 不知道 Blazor 设置的浏览器中的实际路径,并且始终返回/_blazor,这是有道理的。

我不想将所有函数包装在try - catch块中来记录异常。Blazor 类型还处理异常并设置blazor-error-ui元素的 CSS。

为了尝试重现错误,我需要异常发生时在浏览器中设置的 URL。有没有办法捕获全局异常并以某种方式获取浏览器中设置的 URL?也许可以访问该NavigationManager对象?

小智 0

    @inherits LayoutComponentBase
    <div class="page">
       <div class="sidebar">
          <NavMenu />
       </div>
       <main>
          <div class="top-row px-4">
             <a href="https://docs.microsoft.com/aspnet/" target="_blank">About</a>
          </div>
          <article class="content px-4">
             <ErrorBoundary>
                <ChildContent>
                   @Body
                </ChildContent>
                <ErrorContent>
                   <p>&#128165; Something blew up!</p>
                 @{
                   Logging Actions
                   Get your current uri NavigationManager.Uri
                  }
                </ErrorContent>
             </ErrorBoundary>
          </article>
       </main>
    </div>
Run Code Online (Sandbox Code Playgroud)

使用ErrorBoundary 组件将指令 包装在组件@BodyErrorBoundary。这将捕获在@Body.