2009-05-20 11 views
1

Andrew Arnottは、OpenId認知者から属性交換拡張データを抽出する方法についての記事をここに掲載しています。ここでは、コードの抜粋です: -DotNetOpenID AX属性からデータを抽出するにはどうすればよいですか?

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 

歓声:)

答えて

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の延長自体の複雑さと柔軟性にそれをチョーク。申し訳ありません。

+0

あなたは、「正しい」コードが単一のAX値をフェッチすることがどれほど面倒であるかを見て、FetchResponseクラスにヘルパーメソッドを追加するよう動機づけました。それはv3.2になります。 http://dotnetopenauth.net:8000/ticket/67 –

+0

うん。私はこの最後の夜をした拡張メソッドを追加しました。私は別のSOの投稿にそれを掲載しました。しかし、あなたはそれをすべて追加しました:)私の拡張メソッドはキーのパラメータで渡されたので、キーのパラメータで最初のキーの最初の値を抽出できます:) –

+0

また、emailAddressesは常にインスタンスを返しますか?それはNULLを返すことができますか? –

関連する問題