.Net Core 3.1 登录用户帮助

Posted

技术标签:

【中文标题】.Net Core 3.1 登录用户帮助【英文标题】:.Net Core 3.1 logged in user assistance 【发布时间】:2020-12-29 14:39:04 【问题描述】:

我在这里寻求帮助。我构建了一个使用 .NET Core 3.1、身份和 EF Core 的应用程序。我已扩展 aspnetusers 以包含其他列。我的公司对所有其他数据库查询使用存储过程。

我的问题是如何获取当前登录用户的信息并在针对数据库的 FromSqlRaw 选择语句中使用此信息(包括自定义扩展标识)。目前,我的用户是硬编码的,但这应该是登录到应用程序的任何人。

这是我目前拥有的。

Select * from dbo.CustomerList where usercode = 'BobS';

我的猜测是使用声明,但我不确定为什么我的代码不起作用。

【问题讨论】:

This 应该会有所帮助。我还必须提请您注意,下次在匆忙在这里提问之前做您的研究。需要双方共同努力。 【参考方案1】:

我假设在您的入口点您已经拥有登录用户,很可能来自 HttpContext。 您可以将 UserManager 注入您当前的类并通过类似的方式加载用户。

var user = await _userManager.GetUserAsync(HttpContext.User);

然后,此用户对象应包含所有字段,包括您创建的 efcore 实体的自定义字段。

然后您可以扩展您的 efcore dbcontext 以映射原始 sql 查询的结果并运行类似的操作。

var customers = context.CustomerList
    .FromSqlInterpolated($"Select * from dbo.CustomerList where usercode = user.Code")
    .ToList();

如需进一步参考,您可以参考以下链接:

https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.identity.usermanager-1?view=aspnetcore-5.0

一般来说,使用实体框架等 ORM 框架,同时通过存储过程对数据库内部的大部分应用程序逻辑进行编码可能不是最好的方法。通常我在 .NET 中创建大部分业务逻辑,通过 ORM 框架查询必要的数据,并且仅在性能关键场景或 ORM 框架映射失败时通过原始查询选项使用存储过程/函数。

【讨论】:

以上是关于.Net Core 3.1 登录用户帮助的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET Core 3.1 的另一个应用程序中包含用户管理器

ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?

ASP.NET Core 3.1 - 如何获取客户端的 IP 地址?

手把手教你 .NET Core 3.1 JWT身份认证

用户授权 - 为用户分配授权策略 .Net Core 3.1

如何在 ASP NET CORE 3.0 中获取当前登录的用户 ID?