设为首页 - 加入收藏  
您的当前位置:首页 >IT科技 >.NET Core如何全局获取用户信息? 正文

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

来源:汇智坊编辑:IT科技时间:2025-11-04 13:00:23

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

全局获取用户信息

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

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

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

public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) {     await next(); } 

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

public class Session {     /// <summary>     /// 用户id     /// </summary>     public string UserId { get; set; }     /// <summary>     /// 用户名     /// </summary>     public string UserName { get; set; } } 

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

public class AsyncSessionFilter : IAsyncActionFilter {     private readonly Session _session;     public AsyncSessionFilter(Session session)     {         _session = session;     }     public async Task OnActionExecutionAsync(       ActionExecutingContext context,       ActionExecutionDelegate next)     {         var user = context.HttpContext.User;         _session.UserId = user.FindFirst(JwtRegisteredClaimNames.Sub)?.Value;         _session.UserName = user.FindFirst(JwtRegisteredClaimNames.UniqueName)?.Value;         await next();     } } 

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

//注册用户会话 services.AddScoped<Session>(); //注册全局过滤器    services.AddControllers(options => {    options.Filters.Add<AsyncSessionFilter>(); }) 

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

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

0.5832s , 11663.1796875 kb

Copyright © 2025 Powered by .NET Core如何全局获取用户信息?,汇智坊  滇ICP备2023006006号-2

sitemap

Top