当前有两种登录方式。一种是通过活动目录,我可以获取用户的声明身份。

第二个是通过自定义注册表格,即使我可以使用以下代码获取用户的索赔信息:

foreach (Microsoft.IdentityModel.Claims.Claim claim in identity.Claims)
{
    Console.Write("Type: " + claim.type);
}


输出:

claimtype=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
[email protected]


我遇到的问题是,我正在尝试获取自定义寄存器声明的值,然后使用以下代码将其保存到用户表中,但是没有运气

var myemail = identity.Claims.First(c => c.ClaimType == "EmailAddress").Value;


错误提示:


  “序列不包含任何元素”

最佳答案

索赔类型为

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress


不是EmailAddress。如果您不想重复整个类型,请使用ClaimTypes.Email

var myemail = identity.Claims.First(c => c.ClaimType == ClaimTypes.Email).Value


然后您的错误提示没有正确的EmailAddress类型的声明。然后,您尝试获取空集合的第一个元素,并得到实际的异常。

关于c# - 用户声明身份,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33766960/

10-10 18:13