加入收藏 | 设为首页 | 会员中心 | 我要投稿 甘南站长网 (https://www.0941zz.com/)- 科技、行业物联网、开发、云计算、云管理!
当前位置: 首页 > 编程开发 > asp.Net > 正文

如何通过接口获取登录的用户名以在asp.net core mvc中按列插入更

发布时间:2023-02-17 08:55:19 所属栏目:asp.Net 来源:互联网
导读:如何解决如何通过接口获取当前登录的用户名,以在asp.net core mvc中按列插入更新?? 我想创建一个由更新的列,因此,每当用户修改数据时,更新的列将填充当前登录的用户名。我想使用一个接口,该接口获取当前登录用户的名称,然后在AppDbContext中的savech
  如何解决如何通过接口获取当前登录的用户名,以在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对象中所示。不知道您真正需要什么。

(编辑:甘南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读