1

Andrew Arnottは、OpenIdプロバイダーから属性交換拡張データを抽出する方法についてここに投稿しています。これがコードの抜粋です:-

var fetch = openid.Response.GetExtension<FetchResponse>();   
if (fetch != null)
{   
    IList<string> emailAddresses = fetch.GetAttribute
                                   (WellKnownAttributes.Contact.Email).Values;   
    IList<string> fullNames = fetch.GetAttribute
                                   (WellKnownAttributes.Name.FullName).Values;   
    string email = emailAddresses.Count > 0 ? emailAddresses[0] : null;   
    string fullName = fullNames.Count > 0 ? fullNames[0] : null;   
}  

私が次のことをしようとすると...

fetch.GetAttribute(...) 

コンパイルエラーが発生します。基本的に、それは存在しません。次のようにこれを行う唯一の(読む:適切な)方法です...

fetch.Attribue[WellKnownAttributes.Contact.Email].Values

乾杯 :)

4

1 に答える 1

1

残念ながら、私のブログ投稿は DotNetOpenId 2.x 用に書かれたものですが、DotNetOpenAuth 3.x には AX 拡張機能用の API が少し異なり、それがあなたが遭遇しているものです。

あなたがたどり着いたものは近いですが、あなたが持つべきものではありません。プロバイダーからの応答に属性が含まれていない場合は、NullReferenceExceptionまたはが生成されます。KeyNotFoundException実際、DNOI 2.x が別の方法で実装されていない限り、これは私のブログ投稿のバグかもしれません。

とにかく、メールアドレスを見つけるためにすべきことは次のとおりです。

if (fetch.Attributes.Contains(WellKnownAttributes.Contact.Email)) {
    IList<string> emailAddresses =
        fetch.Attributes[WellKnownAttributes.Contact.Email].Values;
    string email = emailAddresses.Count > 0 ? emailAddresses[0] : null;
    // do something with email
}

電子メール アドレスを取得するだけで面倒だと思われる場合は、AX 拡張機能自体の複雑さと柔軟性のせいにしてください。申し訳ありません。

于 2009-05-21T03:25:58.640 に答える