Láz*_*olt 6 c# blazor blazor-server-side
我正在尝试向我的应用程序添加更详细的错误日志记录,以便在电路崩溃时记录当前页面 url。执行此操作的一种方法是重写OnCircuitClosedAsynccustom 中的方法CircuitHandler,但是我不知道如何将电路 id 字符串与活动用户会话关联起来。
我知道我可以通过注入来跟踪 CircuitHandler 中的用户IHttpContextAccessor(请参阅此答案),但是用户可以打开多个选项卡,甚至可以有多个并发登录会话,并且我需要确切地知道为每个会话分配了哪个电路 ID单独的页面组件。
有没有办法从 Blazor 组件获取当前电路 ID,即使同一用户打开了多个选项卡(即与其帐户关联的多个电路)?
实施有范围的CircuitHandler.
在OnCircuitOpenedAsync覆盖中,将电路存储在应用程序状态。
在组件中,从应用程序状态获取电路。
这是一个基本的最小示例:
CircuitHandlerusing Microsoft.AspNetCore.Components.Server.Circuits;
internal class MyCircuitHandler : CircuitHandler
{
  private IMyCircuit myCircuit;
  public MyCircuitHandler(IMyCircuit myCircuit)
  {
    this.myCircuit = myCircuit;
  }
  public override Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken)
  {
    myCircuit.CurrentCircuit = circuit;
    return base.OnCircuitOpenedAsync(circuit, cancellationToken);
  }
}
internal interface IMyCircuit
{
  Circuit CurrentCircuit { get; set; }
}
internal class MyCircuit : IMyCircuit
{
  public Circuit? CurrentCircuit { get; set; }  
}
builder.Services.AddScoped<IMyCircuit, MyCircuit>();
builder.Services.AddScoped<CircuitHandler, MyCircuitHandler>();
@page "/"
@inject IMyCircuit circuit
<h1>Circuit: @circuit?.CurrentCircuit?.Id</h1>
| 归档时间: | 
 | 
| 查看次数: | 856 次 | 
| 最近记录: |