前言

在增删改查中的增和改操作中,我们经常需要更新数据流的创建人和修改人,无论我们项目是基于DDD,抑或是简单仅有服务层,此时我们都需要获取用户信息,那么我们只能将用户标识从控制器层层传递到服务或仓储层?鉴于如上场景很常见,难道我们没发觉这样做很是繁琐吗?于是乎,我们想要解放生产力,下面咱们来聊聊我个人的想法

全局获取用户信息

既然是全局获取用户信息,难道是定义静态变量?怎么可能,当然是基于请求而获取,基于静态变量必然存在多个用户请求覆盖信息的情况,那我们到底应该怎么全局获取?首先我们想到的过滤器比如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接口而实现全局获取用户信息

.NET Core如何全局获取用户信息?的更多相关文章

  1. .NET微信开发通过Access Token和OpenID获取用户信息

    本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言. 本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息 ...

  2. php 微信登录 公众号 获取用户信息 微信网页授权

    php 微信登录 公众号 获取用户信息 微信网页授权 先自己建立两个文件: index.php  和  getUserInfo.php index.php <?php //scope=snsap ...

  3. PHP 微信公众号开发 - 获取用户信息

    项目微信公众号开发,记录获取用户微信号信息,和用户openid 1,登录微信公众平台 点击登录微信公众平台 2,获取公众号开发信息 登陆之后在 开发->基本配置 3,设置IP白名单 在这里添加服 ...

  4. 微信网页授权,获取微信code,获取access_tocken,获取用户信息

    微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 ...

  5. 微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github

    不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口.目前还在开发第三方微信 ...

  6. 微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法

    今天讲讲利用微信oauth2实现第三方登陆的实现方法. 先说说前提吧! 首先你得是服务号,并且是经过认证的.这样微信会给你很多第三方接口的权限,如果是订阅号或者没有认证的服务号那就不用想了! 一开始你 ...

  7. QQ登入(2)获取用户信息

    private void initView() { mUserInfo = (TextView) findViewById(R.id.user_info); mUserLogo = (ImageVie ...

  8. [iOS微博项目 - 3.4] - 获取用户信息

    github: https://github.com/hellovoidworld/HVWWeibo   A.获取用户信息 1.需求 获取用户信息并储存 把用户昵称显示在“首页”界面导航栏的标题上   ...

  9. Laravel OAuth2 (一) ---简单获取用户信息

    前言 本来要求是使用微信进行第三方登陆,所以想着先用 github 测试成功再用微信测试,可是最近拖了好久都还没申请好微信开放平台的 AppID ,所以就只写 github 的第三方登陆吧,估计微信的 ...

随机推荐

  1. esp项目,

    http://www.cirmall.com/circuit/6012/%E6%99%BA%E8%83%BD%E5%8C%96%E7%A7%8D%E8%8A%B1%E7%AE%80%E6%98%93% ...

  2. 离散傅里叶变换的衍生,负频率、fftshift、实信号、共轭对称

    封面是福州的福道,从高处往下看福道上的人在转圈圈.从傅里叶变换后的频域角度来看,我们的生活也是一直在转圈圈,转圈圈也是好事,说明生活有规律,而我们应该思考的是,如何更有效率地转圈圈--哦别误会,我真不 ...

  3. 20192113 2020-2021-2 《Python程序设计》实验三报告

    20192113 2020-2021-2 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 1921 姓名: 衣丽莎 学号:20192113 实验教师 ...

  4. idea开发web项目框架失效和无法启动问题

    不会配置idea的javaweb环境的小伙伴可以点击此链接 idea最新版,配置javaweb环境 很多小伙伴用idea开发web项目可能会出现所有代码都写对了但是无论如何都没法运行的情况,eclip ...

  5. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...

  6. JavaScript 中数组 sort() 方法的基本使用

    在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序. 今天,就数组的 sort 方法来学习一下,避免日后踩坑的悲惨遭遇. 概念 sort ...

  7. Clang:LLVM的C语言家族前端

    Clang:LLVM的C语言家族前端 Clang项目为LLVM 项目的C语言家族(C,C ++,Objective C / C ++,OpenCL,CUDA和RenderScript)中的语言提供了语 ...

  8. 所有处理都走向AI

    所有处理都走向AI All Processing Bends Toward AI 旧金山--谷歌正在试验机器学习(ML)来执行集成电路设计中的位置和路径,并取得了很好的效果.上周在ISSCC会议上宣布 ...

  9. git操作分支的常用的命令

    查看所有的分支:                 git branch -a 查看当前所在的分支:          git branch 检出分支:                          ...

  10. EasyExcel 框架使用-读

    EasyExcel 框架使用 官方介绍:JAVA解析Excel工具EasyExcel Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内 ...