Как извлечь данные из атрибута DotNetOpenID AX? - PullRequest
1 голос
/ 20 мая 2009

У Эндрю Арнотта есть пост о том, как извлечь данные расширения обмена атрибутами из провайдера 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

Ура:)

1 Ответ

1 голос
/ 21 мая 2009

Боюсь, что мой пост был написан для DotNetOpenId 2.x, но DotNetOpenAuth 3.x имеет немного другой API для расширения AX, и это то, с чем вы столкнулись.

То, к чему вы пришли, это близко , но не совсем то, что вы должны иметь. То, что у вас есть, сгенерирует 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. Извините за это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...