Боюсь, что мой пост был написан для 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. Извините за это.