2016-08-18 9 views
0

Microsoftの矛盾したAPIドキュメント(outlook.office.com、outlook.office365.com、microsoft graph、Azureなど)を区別するのは難しいですOutlook Office REST APIから連絡先を取得する - Javascript

私は認証に成功して連絡先を取得しましたが、ページングを停止する必要がある回数を把握できていないようです。

私が使用してきた:

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タイプを返し続けます。

誰もがこれまでに苦労していることや何が起こっているのか分かっていれば、正しい方向に1点を感謝したいと思います。


EDIT:彼の役に立つのサポートについては、以下のジェイソンに感謝します。サンドボックスを使用して、私は次のように問題を再現することができました:私のアカウントにログインして

- >受信したアクセストークン - >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 

第2編集https://outlook.office.com/api/v2.0/me/contacts?$count=trueは、連絡先の有効な配列を返す場合でも、@odata.count": -1を返します。


第三編集:作業バージョン(同じメソッドが上記のエラーとして使用された) URL:

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] 

応答https://outlook.office.com/api/v2.0/me/contacts/ $

リクエストヘッダのカウント

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値になる常にリターンあなたは(あなたが指定しなかった場合または10)あなたは$topで指定したページサイズに基づいて、次のページを取得するために使用できるURLここGET https://outlook.office.com/api/v2.0/me/contactsをやってからの値があります:。

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

これは10個の結果(先にあなたをスキップデフォルトに基づいてページサイズ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

ええ、その場合は、カウントが必要です。あなたがサンドボックスでそれを再現できる場合は、完全な応答(ヘッダを含む)を投稿してもよろしいですか?私は開発者によってそれを実行したいと思います。 –

+0

ええ、少しヒットして見逃しているようです。私のアプリケーションは、約2回の呼び出しのためのカウントを取得し、何も変更せずに '-1'に戻った。私は時折サンドボックスに失敗することもあります。コメントに答えるには応答が長すぎるので、質問を編集します。 – SuperSephy

関連する問題