.NETCore如何全局获取用户信息?

鉴于如上场景很常见,难道我们没发觉这样做很是繁琐吗?于是乎,我们想要解放生产力,下面咱们来聊聊我个人的想法。

专注于为中小企业提供成都做网站、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业长白免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

全局获取用户信息

既然是全局获取用户信息,难道是定义静态变量?怎么可能,当然是基于请求而获取,基于静态变量必然存在多个用户请求覆盖信息的情况。

那我们到底应该怎么全局获取?首先我们想到的过滤器比如ActionFilter...等等,但要是我们需要进行异步操作呢?貌似又不可行。

根据我查询官方文档,没搞错的话,应该是从1.0开始就给出了异步过滤器,那就是IAsyncActionFilter,此方法不同于ActionFilter的是,它能够处理异步操作,同时它是在模型绑定完成之后执行,也就是只有一个异步方法。

 
 
 
 
  1. public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
  2. {
  3.     await next();
  4. }

接下来我们定义全局用户会话类,如下:

 
 
 
 
  1. public class Session
  2. {
  3.     /// 
  4.     /// 用户id
  5.     /// 
  6.     public string UserId { get; set; }
  7.     /// 
  8.     /// 用户名
  9.     /// 
  10.     public string UserName { get; set; }
  11. }

紧接着,比如项目我们使用JWT,则拿到声明中用户标识和用户账号,那么我们接下来我们只需要实现上述异步action过滤器接口即可,如下:

 
 
 
 
  1. public class AsyncSessionFilter : IAsyncActionFilter
  2. {
  3.     private readonly Session _session;
  4.  
  5.     public AsyncSessionFilter(Session session)
  6.     {
  7.         _session = session;
  8.     }
  9.     
  10.     public async Task OnActionExecutionAsync(
  11.       ActionExecutingContext context,
  12.       ActionExecutionDelegate next)
  13.     {
  14.         var user = context.HttpContext.User;
  15.         _session.UserId = user.FindFirst(JwtRegisteredClaimNames.Sub)?.Value;
  16.         _session.UserName = user.FindFirst(JwtRegisteredClaimNames.UniqueName)?.Value;
  17.         await next();
  18.     }
  19. }

最后,则很简单的进行上述接口实现和会话注入,如下:

 
 
 
 
  1. //注册用户会话
  2. services.AddScoped();
  3.    
  4. //注册全局过滤器   
  5. services.AddControllers(options =>
  6. {
  7.    options.Filters.Add();
  8. })

在实际使用中,我们只需要在仓储或服务层构造函数使用Session,即可拿到用户名和用户id,从而最终解决对于新增和更改操作处理操作人信息,如此是不是来的更加方便简洁呢?

在.NET Core中借助实现异步IAsyncActionFilter接口而实现全局获取用户信息

本文题目:.NETCore如何全局获取用户信息?
文章地址:http://www.mswzjz.com/qtweb/news34/181634.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联