如何解决如何通过接口获取当前登录的用户名,以在asp.net core mvc中按列插入更新?
我想创建一个由更新的列,因此,每当用户修改数据时,更新的列将填充当前登录的用户名。我想使用一个接口,该接口获取当前登录用户的名称,然后在AppDbContext中的savechanges方法中,每当数据更新时就插入用户名。请问有人帮我解决该问题,因为我是ASP.NET core mvc的新手,我从大学获得了作业。我真的要感谢所有经验丰富的程序员。
解决方法
希望我能很好地理解你的问题。在这里:
如果您要检索有关向服务器发送请求的用户的某些信息,并且您使用默认的身份行为,那么它应该很容易。我不知道您使用什么版本的ASP.NET,我将假定它的ASP.NET Core 3(从您的标签等开始)。
对于每个请求,都有一个HttpContext对象,该对象会记住有关HTTP请求,HTTP响应等的信息。如果您从Controller
/ ControllerBase
继承控制器,则可以直接访问它上下文。上下文包含一个名为“ User
”的属性,其中包含各种信息,包括您的用户名。
[AllowAnonymous]
[HttpGet("me")]
public string WhoAmI()
{
//Try this
var userName = HttpContext.User?.Identity?.Name;
//Or even
var userName = User?.Identity?.Name;
return userName;
}
现在,如何在AppDbContext
上下文中获得此名称?首先,最好的方法是创建一个为您提供此名称的服务。我们称之为UserRepository
。用户存储库将接受IHttpContextAccessor
(为您提供HttpContext
(和该用户名)的用户名。如果您使用依赖项注入(在ASP.NET中“自动”使用),将注入IHttpContextAccessor
。
public class UserRepository : IUserRepository
{
private readonly IHttpContextAccessor _httpContextAccessor;
public UserRepository(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void GetCurrentUserName()
{
var username = _httpContextAccessor.HttpContext.User.Identity.Name;
return username;
}
}
您可以将此服务添加到您的服务中,并且可以在各个位置注入它。我什至可以注入您的数据库环境。
// Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(); //You probably have this one
services.AddHttpContextAccessor(); //Add the context accessor
services.AddTransient<IUserRepository,UserRepository>(); //This is our user repository
}
您应该可以将其用作:
public class AppDb : DbContext
{
readonly IUserRepository userRepo;
public AppDb(DbContextOptions<AppDb> options,IUserRepository userRepo)
: base(options)
{
this.userRepo = userRepo;
userRepo.GetCurrentUserName();
}
}
IUserRepository
将“自动”注入每个请求。
或者,您可以根据需要将IUserRepository
注入。例如,在Controller的构造函数中,类似于AppDb对象中所示。不知道您真正需要什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。