2009-05-20 7 views
1

Andrew Arnott a publié un article sur la façon d'extraire les données d'extension d'échange d'attributs, à partir d'un programme OpenId. Voici un extrait du code: -Comment extraire des données d'un attribut 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; 
} 

Lorsque je tente de faire ce qui suit ...

fetch.GetAttribute(...) 

je reçois une erreur de compilation. Fondamentalement, cela n'existe pas. Est le seul (lire: bon) façon de le faire comme suit ...

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

cheers :)

Répondre

1

Je crains que mon billet de blog a été écrit pour DotNetOpenId 2.x, mais DotNetOpenAuth 3. x a une API légèrement différente pour l'extension AX et c'est ce que vous recherchez.

Ce que vous êtes venu est fermer, mais pas tout à fait ce que vous devriez avoir. Ce que vous avez générerait un NullReferenceException ou KeyNotFoundException si l'attribut n'est pas inclus dans la réponse du fournisseur. En fait, cela pourrait être un bug dans mon article de blog, à moins que DNOI 2.x ait été implémenté différemment, je ne me souviens pas.

Quoi qu'il en soit, voici ce que vous devez faire pour pêcher une adresse e-mail:

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 
} 

Si cela semble laborieux pour juste tirer l'adresse e-mail, craie à la complexité et la flexibilité de l'extension AX lui-même . Désolé pour ça.

+0

Vous savez, vu à quel point le "bon" code est de chercher une seule valeur AX m'a motivé pour ajouter une méthode d'assistance à la classe FetchResponse. Ce sera dans la v3.2. http://dotnetopenauth.net:8000/ticket/67 –

+0

Oui. J'ai ajouté une méthode d'extension qui l'a fait la nuit dernière. Je l'ai posté dans mon autre poste. Mais vous avez ajouté tout ce qui est bon :) ma méthode d'extension passée dans un params de clés, donc je peux extraire la première valeur pour la première clé, dans les paramètres clés :) –

+0

Aussi, emailAddresses renverra toujours une instance? pourrait-il retourner NULL? –

Questions connexes