【问题标题】:WIF 4.5 Claim Value - Object reference not set to an instance of an objectWIF 4.5 声明值 - 对象引用未设置为对象的实例
【发布时间】:2012-07-22 01:06:36
【问题描述】:

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

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

这里的问题是 Windows Live ID 在声明中没有 email 值,所以如果用户使用 live ID 登录我有 NullReferenceException - 对象引用未设置为对象的实例。我也试过了;

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

没有成功

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

谢谢

【问题讨论】:

    标签: c#-4.0 asp.net-mvc-4 wif claims-based-identity claims


    【解决方案1】:

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

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

    或者您可以只进行检查以确保声明不为 NULL:

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

    希望这会有所帮助。

    【讨论】:

    • 第一个语句是有效的,即使不取值,但我可以解析字符串来取它。谢谢你,先生!我还解决了在 try/catch 块中插入代码但不是一种优雅的方式
    猜你喜欢
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多