.NET 6中((ClaimsIdentity)Thread.CurrentPrincipal.Identity)的等效实现
.NET 6中等效实现方案
原代码在.NET 6中触发NullReferenceException的原因是:.NET 6控制台应用默认未初始化Thread.CurrentPrincipal,直接访问其Identity属性会返回null,强制类型转换时引发异常。
以下是简洁的等效实现:
安全初始化并添加Claim
using System.Security.Claims; using System.Threading; // 先获取或初始化ClaimsIdentity var claimsIdentity = Thread.CurrentPrincipal?.Identity as ClaimsIdentity; if (claimsIdentity == null) { claimsIdentity = new ClaimsIdentity(); Thread.CurrentPrincipal = new ClaimsPrincipal(claimsIdentity); } // 添加Claim claimsIdentity.AddClaim(new Claim("你的Claim类型", "你的Claim值"));
说明
- 用
as进行安全转换,避免强制转换的空引用风险 - 若当前无有效
ClaimsIdentity,则创建新实例并赋值给Thread.CurrentPrincipal - 完成初始化后即可安全调用
AddClaim方法
内容的提问来源于stack exchange,提问作者kaisfarza
相关产品推荐
相关产品推荐

