文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 02:42

关注

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

全局获取用户信息

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

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

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

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

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

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

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

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

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

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

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

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

 

来源:JeffckyShare内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯