2016-11-08 13 views
0

dotnetcoreで書かれた既存のアプリケーションにdocumentdbサポートを追加しようとしているため、SDKを使用できませんが、REST APIを使用していると思います。容易にサンプルを複製できました。 REST APIサンプルに含まれるすべてのリスト/クエリを正常に実行できます。documentDB Rest API - 文書を作成

ドキュメントを作成しようとすると問題が発生します。私は401に絶えず直面しており、周りを回っているように見えません。私は主キーを使用しています - 読み取り専用キーではありません。そして、私はここでAPIの文書を読んで再読しました:https://msdn.microsoft.com/en-us/library/azure/mt489088.aspxしかし、それをうまく動作させることはできません。

これはおそらく私の認証キーですが、私はサンプルGenerateMasterKeyAuthorizationSignature(string verb, string resourceId, string resourceType, string key, string keyType, string tokenVersion)のメソッドを使用しています。これはクエリに効果的です。私は、IDベースのRESOURCEIDを使用して、私は前からのコードを再利用できると思っていたんだ:

resourceLink = string.Format("dbs/{0}/colls/{1}/docs", databaseId, collectionId); 
resourceId = (idBased) ? string.Format("dbs/{0}/colls/{1}/docs", databaseId, collectionId) : collectionId.ToLowerInvariant();` 

タイムスタンプが、私はその問題が他の場所で述べて見てきましたが、クエリは、働く権利ためと思われます。そして、私はパーティションを持つライアンのPostWithNoCharSetAsync

私はとclient.DefaultRequestHeaders.Add("x-ms-documentdb-is-upsert", "true");

ずに試してみたがあるかもしれないものを使用していますか?それを指定すべきですか?

APIドキュメントには、Cookieやno-cacheなどのヘッダーがあります。彼らは違いはありませんか? JSON文書が文字列リテラルのマーキングと遭遇した場合

それは問題ではない - このよう:以下" {\r\n \"id\": 4441,\r\n \"Name\": \"Artesia Spa - Grand Hotel\",\r\n }

はシオマネキからPOSTです。

REQUEST

POST https://etest.documents.azure.com/dbs/etest/colls/unittest/docs HTTP/1.1 
x-ms-date: Tue, 08 Nov 2016 20:34:40 GMT 
x-ms-version: 2015-12-16 
authorization: type%3dmaster%26ver%3d1.0%26sig%3dU8BmnPhUMWyoVqNdbI0hy1Kc%2b1Yge79dCBMz8f2v9pE%3d 
x-ms-documentdb-is-upsert: true 
Content-Type: application/query+json 
Host: etest.documents.azure.com 
Content-Length: 48 
Expect: 100-continue 

{"id": 4441,"Name": "Artesia Spa - Grand Hotel"} 

RESPONSEあなただけの以前のSDK、from Nugetのように、取得して使用することができます公式ネットコアSDKが用意されました

HTTP/1.1 401 Unauthorized 
Content-Type: application/json 
Server: Microsoft-HTTPAPI/2.0 
x-ms-activity-id: d83ae44f-3dc8-47a6-b310-cdf8ca87c597 
Strict-Transport-Security: max-age=31536000 
x-ms-gatewayversion: version=1.10.39.1 
Date: Tue, 08 Nov 2016 20:36:11 GMT 
Content-Length: 358 

{"code":"Unauthorized","message":"The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'post\ndocs\ndbs/etest/colls/unittest\ntue, 08 nov 2016 20:34:40 gmt\n\n'\r\nActivityId: d83ae44f-3dc8-47a6-b310-cdf8ca87c597"} 
+0

こんにちは、GenerateMasterKeyAuthorizationSignatureのコードを投稿してもよろしいですか?コードのトラブルシューティングが簡単になります。トークンを構築するためにリソースIDを使用する場合、resourceidは、リソースe、gに一致するケーシングを維持しなければならないことに注意してください。私のコレクション。ここでは、REST APIを使用して認証トークン文字列を作成する方法について説明します。https://msdn.microsoft.com/en-us/library/azure/dn783368.aspx A – h0n

+0

さらに、実装をhttps ://github.com/Azure/azure-documentdb-dotnet/blob/master/samples/rest-from-.net/Program.cs? –

答えて

1

フルサンプルが必要な場合は、GitHub repoを参照してください。これは最も一般的なシナリオをカバーしています。

関連する問題