Я пытаюсь добавить поддержку 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"}
привет, не возражаете ли вы разместить свой код для GenerateMasterKeyAuthorizationSignature? Было бы проще устранить неисправность с помощью кода. Обратите внимание, что если вы используете идентификатор ресурса для создания токена, resourceid должен поддерживать соответствие обсадной колонны ресурсу, e, g. Моя коллекция. Вот ссылка на создание строки Auth Token с использованием REST API: https://msdn.microsoft.com/en-us/library/azure/dn783368.aspx A – h0n
Кроме того, можете ли вы взглянуть и сравнить свою реализацию с https : //github.com/Azure/azure-documentdb-dotnet/blob/master/samples/rest-from-.net/Program.cs? –