2016-11-08 5 views
0

Я пытаюсь добавить поддержку documentdb в существующее приложение, написанное в dotnetcore, поэтому я не могу использовать SDK, но думал, что просто использую REST API. Достаточно легко, и образцы легко дублировать. Я могу сделать весь список/запросы, которые содержатся в примере REST API, просто отлично.documentDB Rest API - создать документ

Проблема возникает при попытке создания документов. Я постоянно сталкиваюсь с 401 и, похоже, не могу обойти это. Я использую первичный ключ, а не только ключ для чтения. И я прочитал и перечитал API-документ здесь: https://msdn.microsoft.com/en-us/library/azure/mt489088.aspx, но не могу заставить его работать.

Возможно, это связано с моим ключом auth, но я использую метод в образцах 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 от скрипача.

ЗАПРОС

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"} 

РЕАКЦИЯ

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? Было бы проще устранить неисправность с помощью кода. Обратите внимание, что если вы используете идентификатор ресурса для создания токена, resourceid должен поддерживать соответствие обсадной колонны ресурсу, e, g. Моя коллекция. Вот ссылка на создание строки Auth Token с использованием 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

Существует в настоящее время официальный .Net Ядро SDK вы можете получить и использовать, как и предыдущий SDK, from Nuget.

Если вам нужен полный образец, вы можете взглянуть на опубликованный GitHub repo, который охватывает наиболее распространенные сценарии.

Смежные вопросы