2

新しいWIF4.5SDKを使用していますが、LINQで.FirstorDefault()で解決されるのと同じ厄介な例外があります。

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

ここでの問題は、Windows Live IDのクレームに電子メール値がないため、ユーザーがLive IDでログインした場合、NullReferenceException-オブジェクト参照がオブジェクトのインスタンスに設定されていないことです。私も試しました。

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();

または、クレームがNULLでないことを確認するためのチェックを入れることができます。

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

うまくいけば、これがお役に立てば幸いです。

于 2012-07-24T17:08:54.493 に答える