页面刷新时服务依赖项重置



我有一个asp.net-coreBlazor服务器端应用程序,使用实体框架核心microsoft identity进行身份验证。

我试图在我的应用程序中获得当前用户,然后直接从我的DbContext访问用户对象。

我添加了DbContext作为服务

// Program.cs
builder.Services.AddDbContext<DataContext>(options =>
{
options.UseSqlServer(connectionString);
});

然后使用构造函数注入获取httpcontext,并设置用户对象

// Constructor injection
public DataContext(IHttpContextAccessor httpContextAccessor)
{
// Find the current user
var userId = httpContextAccessor.HttpContext.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;

CurrentUser = this.Users.Where(x => x.Id == userId).Include(x => x.Location).FirstOrDefault();
}

这个工作正常,直到我刷新页面。当我这样做时,httpcontext被重置,并且无法找到当前用户。有没有办法绕过这个问题,或者有别的办法达到这个目的?

如果您希望此值在刷新期间持续存在,则可以从LocalStorage中存储和获取userid

如果用户重新加载页面或关闭并重新打开浏览器,则国家仍然存在。如果用户打开多个浏览器选项卡,则状态为跨选项卡共享。数据保存在localStorage中,直到显式地清除。

查看服务生命周期。你所经历的是一个有作用域的服务的默认行为。

在以下客户端组件场景中,限定了服务的作用域因为为用户创建了一个新电路而被重构:

  • 用户关闭浏览器窗口。用户打开一个新窗口并导航回应用程序。
  • 用户在浏览器窗口中关闭应用程序的一个选项卡。用户打开一个新标签页并导航回应用程序。
  • 用户选择浏览器的重载/刷新按钮。

您也可以将您的服务定义为Singleton,但您必须记住该实例将在所有用户之间共享。根据您的需求/应用程序,使用LocalStorage可能更简单。

相关内容

  • 没有找到相关文章

最新更新