2016-08-18 8 views
0

Microsoft의 모호한 API 문서 (outlook.office.com, outlook.office365.com, Microsoft Graph, Azure 등)를 구별하는 데 어려움이 있습니다.Outlook Office REST API에서 연락처 수 얻기 -

연락처를 성공적으로 인증하고 가져 왔지만 페이징을 중단해야하는 횟수를 알 수 없습니다.

내가 사용하고 :

Access Token url: 
    https://login.microsoftonline.com/common/oauth2/v2.0/token; 
Successful Contact url: 
    https://outlook.office.com/api/v2.0/me/contacts; 

그들의 REST API Resource는 단순히 https://outlook.office.com/api/v2.0/me/contacts/$count에 전화를 걸 수 있어야 말한다 그러나 이것은 몸 -1과 일반 텍스트 MIME 타입을 반환 유지합니다.

이전에 어떤 일이 벌어지고 있는지 또는 어떤 일이 벌어지고 있는지 알고 있다면 올바른 방향으로 한 점을 알려 주시면 감사하겠습니다.


편집 그의 도움 지원 아래 제이슨에게 감사드립니다. 샌드 박스를 사용하여 나는 다음과 같이 문제를 재현 할 수 있었다 : 내 계정에 로그인

-> 수신 액세스 토큰 ->https://outlook.office.com/api/v2.0/me/contacts/$count

요청 헤더에 GET 호출을 만들어 :

GET https://outlook.office.com/api/v2.0/me/contacts/$count HTTP/1.1 
Accept: text/*, application/xml, application/json; odata.metadata=none 
User-Agent: PlayGroundAgent/1.0 
Authorization: Bearer [standard-access-token] 
client-request-id: 8f605[client-id-obscured-for-security]7289 
X-AnchorMailbox: [email-address-removed-for-security on stackOverflow] 

응답

HTTP/1.1 200 OK 
Transfer-Encoding: chunked 
request-id: de95eaa8-95a7-40bb-b0f9-ced7270f0433 
X-CalculatedBETarget: SN1PR05MB1998.namprd05.prod.outlook.com 
X-BackEndHttpStatus: 200 
OData-Version: 4.0 
X-DiagInfo: SN1PR05MB1998 
X-BEServer: SN1PR05MB1998 
X-FEServer: SN1PR0501CA0035 
X-MSEdge-Ref: Ref A: 657E0491C29D46978D8DD3B01B9F93A3 Ref B: DDDD64A109F4E842A8213F038BFDD5FA Ref C: Fri Aug 19 09:20:05 2016 PST 
Cache-Control: private 
Date: Fri, 19 Aug 2016 16:20:05 GMT 
Set-Cookie: exchangecookie=6ca5fc4df96e458e8b879de61aa574ef; expires=Sat, 19-Aug-2017 16:20:05 GMT; path=/; HttpOnly 
Server: Microsoft-IIS/8.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 

-1 

두 번째 편집 : https://outlook.office.com/api/v2.0/me/contacts?$count=true은 유효한 연락처 배열을 반환하더라도 @odata.count": -1을 반환합니다.


3 편집 : 작업 버전 (동일 방법은 위의 오류로 사용) URL이 : https://outlook.office.com/api/v2.0/me/contacts/는 $

요청 헤더를 수 :

GET https://outlook.office.com/api/v2.0/me/contacts/$count HTTP/1.1 
Accept: text/*, application/xml, application/json; odata.metadata=none 
User-Agent: PlayGroundAgent/1.0 
Authorization: Bearer [access-token] 
client-request-id: a7954db3-[client-id]-7a6e2e74dd9c 
X-AnchorMailbox: [same-email-as-above] 

응답를 :

HTTP/1.1 200 OK 
Transfer-Encoding: chunked 
request-id: 8c5db16b-3023-4968-9bdc-3d5ecac12ecb 
X-CalculatedBETarget: SN1PR05MB1998.namprd05.prod.outlook.com 
X-BackEndHttpStatus: 200 
OData-Version: 4.0 
X-DiagInfo: SN1PR05MB1998 
X-BEServer: SN1PR05MB1998 
X-FEServer: SN1PR0501CA0019 
X-MSEdge-Ref: Ref A: 0574E46DB720491FBCEF23B73428F191 Ref B: FA4529229719F069B9D019E4D53E9200 Ref C: Fri Aug 19 09:42:55 2016 PST 
Cache-Control: private 
Date: Fri, 19 Aug 2016 16:42:55 GMT 
Set-Cookie: exchangecookie=63a1de916a4c48be88569f05ce0361a7; expires=Sat, 19-Aug-2017 16:42:55 GMT; path=/; HttpOnly 
Server: Microsoft-IIS/8.5 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 

29 

도움이 필요하십니까?

답변

1

불편을 끼쳐 드려 죄송합니다. 여기에 몇 가지 일이 있습니다.

$count 전화에서 음수가 나왔습니다. https://oauthplay.azurewebsites.net으로 이동하여 계정으로 로그인 한 경우 해당 통화에서 동일한 결과가 나타 납니까?

페이징의 경우 모든 결과를 얻으려는 경우 $count 값에 의존하지 않는 것이 좋습니다.대신 다음 페이지를 얻으려면 응답에 포함 된 @odata.nextLink 값을 사용해야합니다. 물론 모든 결과를 얻기 전에 얼마나 많은 페이지가 있는지 사용자에게 알려 주려고한다면 $count이이를 수행하는 방법입니다.

페이징은 페이지 크기합니다 ($top 매개 변수)와 "커서"합니다 ($skip parameter). If you're making a call to/ME/연락처 페이지 당 더 많은 결과를 요청 with no parameters, then you're getting the default page size of 10 and default cursor of 0. You can use the $ top` 매개 변수에 의해 제어됩니다.

@odata.nextLink 값은 반환 항상 것입니다 (

"@odata.nextLink": "https://outlook.office.com/api/v2.0/me/contacts/?%24skip=10" 

이것은 당신이 앞으로 10 개 결과를 건너 뜁니다. URL은? 여기 GET https://outlook.office.com/api/v2.0/me/contacts 일의 값은의 (지정하지 않은 경우 또는 10)이 $top에 지정된 페이지 크기에 따라 다음 페이지를 얻을 수 있습니다 기본값에 따라 페이지 크기 10).

그리고 여기가 GET https://outlook.office.com/api/v2.0/me/contacts/?$top=20에서 값이다 : 더 이상 페이지가없는 경우

"@odata.nextLink": "https://outlook.office.com/api/v2.0/me/contacts/?%24top=20&%24skip=20" 

@odata.nextLink 값은 응답에 존재하지 않습니다. 따라서 이것을 페이징을 멈추는 지표로 사용할 수 있습니다. 그 샌드 박스에 저를 가리키는위한

+0

감사합니다. 샌드 박스와 동일한 인증 경로 (URL 기반)를 사용하고있는 것처럼 보일 것입니다. 처음 시도했을 때, 그렇습니다. 카운트를 되 돌렸지 만, 두 번의 시도가'-1'을 만들었습니다! 아니, 내 관심사는이 날 전달 뒤로 만, 내가 페이지를 표시하고 싶습니다 제한하는 것이 그이 (가) ... 관련 메모에 는, 페이지 매김을 가진 당신의 도움을 주셔서 감사 실패 트리거 어떤 공통점이 아직 확실하다 사용자가 1 페이지에서 4 페이지로 이동할 수있는 숫자이지만 4 페이지가 실제로 있음을 알아야합니다. – SuperSephy

+0

그래, 그럴 경우 계산이 필요해. 샌드 박스에서 재생산 할 수 있다면 전체 응답 (헤더 포함)을 게시 하시겠습니까? 나는 devs에 의해 그것을 실행하고 싶습니다. –

+0

그래, 좀 안타까워 보인다. 내 응용 프로그램은 약 2 통화에 대한 카운트를 얻은 다음 변경없이 '-1'로 돌아갑니다. 나는 때때로 Sandbox가 실패 할 수도 있습니다. 응답이 너무 길어서 의견을 수정할 수 없으므로 질문을 수정하겠습니다. – SuperSephy