2012-07-23 47 views
0

我使用的是新的WIF 4.5 SDK的一個實例,但我有同樣惱人的例外與LINQ與.FirstorDefault()WIF 4.5索賠值 - 對象引用不設置到對象

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

這裏的問題是Windows Live ID在聲明中沒有電子郵件值,所以如果用戶使用實時ID登錄,我有一個NullReferenceException - 對象引用未設置爲對象的實例。我也試過了;

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

沒有成功

我怎樣才能返回NULL或「」如存在的權利要求中沒有電子郵件?

感謝

回答

2

沒有一個FirstOrDefault快捷方式在ClaimsPrincipal類,但你總是可以只使用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); 

希望這會有所幫助。

+0

第一條語句是有效的,即使不取值,但我可以解析字符串來接受它。謝謝你,先生! 我也解決了在try/catch塊中插入代碼,但並不是一種優雅的方式 – 2012-07-26 00:58:45