【发布时间】:2021-08-01 11:38:33
【问题描述】:
我正在开发一个使用 ASP.NET Core Identity 的 Blazor 服务器项目。我正在尝试实现一个组件来管理当前的活动用户。我可以访问当前客户端的当前身份用户,但我似乎无法访问与当前客户端关联的电路,因为我想跟踪每个用户何时离开浏览器(电路断开连接)。
从'@enet' (link) 的回答中,我尝试实现CircuitHandler,并且我可以获得所有当前电路,但我如何知道哪个电路与哪个用户相关联?
using Microsoft.AspNetCore.Components.Server.Circuits;
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
namespace BlazorCircuitHandler.Services
{
public class CircuitHandlerService : CircuitHandler
{
public ConcurrentDictionary<string, Circuit> Circuits { get;
set; }
public event EventHandler CircuitsChanged;
protected virtual void OnCircuitsChanged()
=> CircuitsChanged?.Invoke(this, EventArgs.Empty);
public CircuitHandlerService()
{
Circuits = new ConcurrentDictionary<string, Circuit>();
}
public override Task OnCircuitOpenedAsync(Circuit circuit,
CancellationToken cancellationToken)
{
Circuits[circuit.Id] = circuit;
OnCircuitsChanged();
return base.OnCircuitOpenedAsync(circuit,
cancellationToken);
}
public override Task OnCircuitClosedAsync(Circuit circuit,
CancellationToken cancellationToken)
{
Circuit circuitRemoved;
Circuits.TryRemove(circuit.Id, out circuitRemoved);
OnCircuitsChanged();
return base.OnCircuitClosedAsync(circuit,
cancellationToken);
}
public override Task OnConnectionDownAsync(Circuit circuit,
CancellationToken cancellationToken)
{
return base.OnConnectionDownAsync(circuit,
cancellationToken);
}
public override Task OnConnectionUpAsync(Circuit circuit,
CancellationToken cancellationToken)
{
return base.OnConnectionUpAsync(circuit, cancellationToken);
}
}
}
【问题讨论】:
-
你可以尝试访问httpcontextaccessor获取用户相关信息。
-
@BrandoZhang 我实际试过了,但是在我注入的HttpContextAccessor对象中,并没有与Circuit相关的信息。
标签: asp.net-core blazor blazor-server-side