2

我正在使用新的 WIF 4.5 SDK,但我遇到了与 LINQ 相同的烦人异常,使用 .FirstorDefault() 解决了

 var claimEmail = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value;

这里的问题是 Windows Live ID 在声明中没有 email 值,所以如果用户使用 live ID 登录,我有一个NullReferenceException - Object reference not set to an instance of an object。我也试过;

var claimEmail = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email).Value.FirstorDefault();

没有成功

如果索赔中没有电子邮件,我如何返回 NULL 或“”?

谢谢

4

1 回答 1

4

类中没有FirstOrDefault快捷方式ClaimsPrincipal,但您始终可以使用 LINQ 来迭代声明列表以执行相同的操作:

var claimEmail = ClaimsPrincipal.Current.Claims.Where(c => c.Type == ClaimTypes.Email).FirstOrDefault();

或者您可以检查以确保 Claim 不为 NULL:

var claimEmail = ClaimsPrincipal.Current.FindFirst(ClaimTypes.Email);
var email = (claimEmail == null ? string.Empty : claimEmail.Value);

希望这会有所帮助。

于 2012-07-24T17:08:54.493 回答