Asp.net Core 通过依赖注入的方式获取用户

思路:Web项目中,需要根据当前登陆的用户,查询当前用户所属的数据、添加并标识对象等。根据请求头Authorization 中token,获取Redis中存储的用户对象。

本做法需要完成 基于StackExchange.Redis 配置,参考:Asp.Net Core基于StackExchange Redis 缓存-CSDN博客

NuGet安装

Microsoft.AspNetCore.Http.Abstractions

1.接口

public interface IUserService
{Task<OMUserInfo> GetUserInfoAsync(string token);Task<OMUserInfo> GetCurrentUserAsync();
}

2.用户对象

public class OMUserInfo
{public Guid UId { get; set; }public string UName { get; set; }public string TrueName { get; set; }public string Mobile { get; set; }public bool IsAdmin { get; set; }public string Department { get; set; }public string UType { get; set; }public string OId { get; set; }public string Token { get; set; }public DateTime ExpireDateTime { get; set; }
}

3.实现

public class OMUserService : IUserService
{private readonly IRedisService _redisService;private readonly IHttpContextAccessor _httpContextAccessor;public OMUserService(IRedisService redisService,IHttpContextAccessor httpContextAccessor){_redisService = redisService;_httpContextAccessor = httpContextAccessor;}public async Task<OMUserInfo> GetCurrentUserAsync(){var token = GetTokenFromHeader();if (string.IsNullOrEmpty(token))return null;return await GetUserInfoAsync(token);}public async Task<OMUserInfo> GetUserInfoAsync(string token){var userKey = $"user:{token}";return await _redisService.StringGetAsync<OMUserInfo>(userKey);}private string GetTokenFromHeader(){var authHeader = _httpContextAccessor.HttpContext?.Request.Headers["Authorization"].ToString();return authHeader?.Replace("Bearer ", "", StringComparison.OrdinalIgnoreCase);}
}

4.注入

Asp.Net Core项目Nuget添加 Microsoft.Extensions.Caching.StackExchangeRedis

 // 添加HttpContext访问器builder.Services.AddHttpContextAccessor();//注册用户服务// 注册Redis服务(使用之前实现的IRedisService)builder.Services.AddStackExchangeRedisCache(options =>{options.Configuration = builder.Configuration.GetConnectionString("Redis");});builder.Services.AddScoped<IUserService, OMUserService>();

5.控制器中使用

private readonly IRedisService _redis;
private readonly IUserService _userService;
public TestController(IRedisService redis, IUserService userService) 
{_redis = redis;_userService = userService;
}[HttpGet("string")]
public async Task<IActionResult> TestString()
{var user = await _userService.GetCurrentUserAsync();Console.WriteLine(user.TrueName);await _redis.StringSetAsync("anna","多慢慢");var result = await _redis.StringGetAsync<string>("anna");return Ok(result);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 + UniApp 蓝牙连接与数据发送(稳定版)

本教程适用于使用 uni-app Vue3 (script setup) 开发的跨平台 App&#xff08;支持微信小程序、H5、Android/iOS 等&#xff09; &#x1f3af; 功能目标 ✅ 获取蓝牙权限✅ 扫描周围蓝牙设备✅ 连接指定蓝牙设备✅ 获取服务和特征值✅ 向设备发送数据包&#xff08;ArrayBu…

Docker + Nginx + Logrotate 日志管理与轮换实践

概述与背景 Docker 容器化环境中 Nginx 日志管理的挑战Logrotate 的作用与必要性结合场景的实际需求&#xff08;如日志切割、压缩、归档&#xff09; Docker 环境下的 Nginx 日志配置 Nginx 日志路径与 Docker 数据卷映射 volumes:- ./nginx/logs:/var/log/nginxLogrotate …

涂胶协作机器人解决方案 | Kinova Link 6 Cobot在涂胶工业的方案应用与价值

涂胶工业现状背景&#xff1a; 涂胶工艺在汽车制造、电子组装、航空航天等工业领域极为关键&#xff0c;关乎产品密封、防水、绝缘性能及外观质量。 然而&#xff0c;传统涂胶作业问题频发。人工操作重复性强易疲劳&#xff0c;涂胶质量波动大&#xff1b;大型涂胶器使用增加工…

释放模型潜力:浅谈目标检测微调技术(Fine-tuning)

引言 在计算机视觉领域&#xff0c;目标检测是一项至关重要的任务&#xff0c;它不仅要识别出图像中存在哪些物体&#xff0c;还要精确地定位它们的位置。从自动驾驶汽车识别行人与车辆&#xff0c;到医疗影像辅助诊断病灶&#xff0c;再到智能安防监控异常事件&#xff0c;目标…

Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战

文章目录 前言:准备工作UE4 vs UE5 性能对比引擎核心技术方案对比UE5 优化总结项目设置可伸缩性组设置VolumetricCloud最后前言: 最近在使用UE5制作VR项目 制作完后发现,我们的场景一直很卡顿,场景优化也做到了极致,但是帧率最高也才30+ 但是我们看到一个竞品,他的帧率竟…

爆炸仿真的学习日志

今天学习了一下【Workbench LS-DYNA中炸药在空气中爆炸的案例-哔哩哔哩】 https://b23.tv/kmXlN29 一开始 如果你的 ANSYS Workbench 工具箱&#xff08;Toolbox&#xff09;里 只有 SPEOS&#xff0c;即使尝试了 右键刷新、重置视图、显示全部 等方法仍然没有其他分析系统&a…

Redis部署架构详解:原理、场景与最佳实践

文章目录 Redis部署架构详解&#xff1a;原理、场景与最佳实践单点部署架构原理适用场景优势劣势最佳实践 主从复制架构原理消息同步机制1. 全量同步&#xff08;Full Resynchronization&#xff09;2. 部分重同步&#xff08;Partial Resynchronization&#xff09;3. 心跳检测…

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月6日第100弹

从今天开始&#xff0c;咱们还是暂时基于旧的模型进行预测&#xff0c;好了&#xff0c;废话不多说&#xff0c;按照老办法&#xff0c;重点8-9码定位&#xff0c;配合三胆下1或下2&#xff0c;杀1-2个和尾&#xff0c;再杀4-5个和值&#xff0c;可以做到100-300注左右。 (1)定…

验证电机理论与性能:电机试验平板提升测试效率

电机试验平板提升测试效率是验证电机理论与性能的重要环节之一。通过在平板上进行电机试验&#xff0c;可以对电机的性能参数进行准确测量和分析&#xff0c;从而验证电机的理论设计是否符合实际表现。同时&#xff0c;提升测试效率可以加快试验过程&#xff0c;节约时间和成本…

C语言 — 编译和链接

目录 1.程序从源文件到结果输出的执行过程2.预处理3.编译3.1 词法分析3.2 语法分析3.3 语义分析3.4 生成test.s文件 4.汇编5.链接6.运行 1.程序从源文件到结果输出的执行过程 2.预处理 预处理阶段的执行操作&#xff1a; 预处理阶段会将#define定义的常量或宏进行替换&#x…

传统业务对接AI-AI编程框架-Rasa的业务应用实战(5)--Rasa成型可用 rasa服务化部署及识别意图后的决策及行为

此篇接续上一篇 传统业务对接AI-AI编程框架-Rasa的业务应用实战&#xff08;4&#xff09;--Rasa成型可用 针对业务配置rasa并训练和部署 上一篇我们已经让Rasa准确识别了我们自然语言指令的开票和查询发票的意图和实体。 # 开具发票场景 用户输入&#xff1a;开具一张1000元…

MajicTryOn(基于wanvideo的虚拟试穿项目)

网络结构 Attention模块详解 左边服装通过qwen2.5-VL-7B来生成详细的服装描述&#xff1b;线条提取器产生相应的线条map&#xff1b;garment和line map通过vae转换为潜在空间特征&#xff0c;然后分别经过patchfier,最后通过zero proj得到Garment Tokens和Line Tokens;右边是di…

JAVA-什么是JDK?

1.JDK 的定义 JDK&#xff08;Java Development Kit&#xff09;是 Java 开发工具包&#xff0c;是 Oracle 官方提供的用于开发、编译和运行 Java 应用程序的核心工具集。它包含了编写 Java 程序所需的编译器、调试工具、库文件以及运行时环境&#xff08;JRE&#xff09;。 2…

Palo Alto Networks Expedition存在命令注入漏洞(CVE-2025-0107)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…

分布式光纤传感(DAS)技术应用解析:从原理到落地场景

近年来&#xff0c;分布式光纤传感&#xff08;Distributed Acoustic Sensing&#xff0c;DAS&#xff09;技术正悄然改变着众多传统行业的感知方式。它将普通的通信光缆转化为一个长距离、连续分布的“听觉传感器”&#xff0c;对振动、声音等信号实现高精度、高灵敏度的监测。…

独家首发!低照度环境下YOLOv8的增强方案——从理论到TensorRT部署

文章目录 引言一、低照度图像增强技术现状1.1 传统低照度增强方法局限性1.2 深度学习-based方法进展 二、Retinexformer网络原理2.1 Retinex理论回顾2.2 Retinexformer创新架构2.2.1 光照感知Transformer2.2.2 多尺度Retinex分解2.2.3 自适应特征融合 三、YOLOv8-Retinexformer…

96. 2017年蓝桥杯省赛 - Excel地址(困难)- 进制转换

96. Excel地址&#xff08;进制转换&#xff09; 1. 2017年蓝桥杯省赛 - Excel地址&#xff08;困难&#xff09; 标签&#xff1a;2017 省赛 1.1 题目描述 Excel 单元格的地址表示很有趣&#xff0c;它使用字母来表示列号。 比如&#xff0c; A 表示第 1 列&#xff0c;…

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…

Druid连接池实现自定义数据库密码加解密功能详解

Druid连接池实现自定义数据库密码加解密功能详解 在企业级应用开发中&#xff0c;数据库密码的明文存储是一个显著的安全隐患。Druid作为阿里巴巴开源的高性能数据库连接池组件&#xff0c;提供了灵活的密码加密与解密功能&#xff0c;允许开发者通过自定义逻辑实现数据库密码…

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…