2009-05-20 2 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가 다르게 구현되지 않는 한 내 블로그 게시물의 버그 일 수도 있습니다. 기억하지 못합니다. 그건 그냥 이메일 주소를 잡아 당겨 들어, AX 확장 자체의 복잡성과 유연성에 초크 힘든 것 같으면

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 
} 

:

어쨌든

, 여기 당신이 이메일 주소를 물고기해야 할 일이다 . 미안합니다.

+0

"올바른"코드가 하나의 AX 값을 가져 오는 것이 얼마나 까다로운지를 보았을 때 FetchResponse 클래스에 도우미 메서드를 추가하도록 동기를 부여했습니다. 그것은 v3.2에있을 것입니다. http://dotnetopenauth.net:8000/ticket/67 –

+0

예. 어제 밤 연장 방법을 추가했습니다. 나는 내 다른 게시물에 게시했습니다. 하지만 당신은 그것을 추가했습니다 :) 내 확장 메서드는 키 매개 변수를 전달하므로 키 매개 변수에서 첫 번째 키의 첫 번째 값을 추출 할 수 있습니다. –

+0

또한 emailAddresses는 항상 인스턴스를 반환합니까? NULL을 반환 할 수 있습니까? –

관련 문제