无法访问 User.Identity 中的声明,但可以在断点视图中查看它们

Can't access Claims in User.Identity but can see them in break-point view

我知道 Claims 字段在 User.Identity 中,因为我可以使用断点查看它及其内容视图,如图所示。但是,当我在开发过程中尝试使用智能感知访问它时,我做不到。 Immediate Window 也是如此 - 属性 似乎不存在。

这是怎么回事?

User.Identity 属性 很可能是 IIdentity type. On the other hand the instance stored in it, is of ClaimsIdentity 类型,正如您在调试器中看到的那样。

您需要 cast 将一种类型转换为另一种类型才能访问该值:

ClaimsIdentity identity = User.Identity as ClaimsIdentity;
IEnumerable<Claim> claims = identity.Claims;

您还可以右键单击调试器弹出窗口中的声明,然后单击 "Copy Expression"。

然后您可以立即粘贴 window 以了解如何访问它。在我的例子中是这个

((Microsoft.IdentityModel.Claims.ClaimsIdentity)((Microsoft.IdentityModel.Claims.ClaimsPrincipal)User).Identity).Claims

很讨厌哈..