Я пытаюсь получить доступ к azure документам сбора учетной записи cosmos db, а также к каждому документу в коллекции. Я сослался на ссылку ниже и изменил все необходимые значения в базе данных космоса, такие как идентификатор базы данных, контейнер, главный ключ itemid и др. c.,
Ссылка:
https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos.Samples/Usage/PowerShellRestApi/PowerShellScripts/ReadItem.ps1
Но я получаю ошибку ниже, работая в Powershell.
Ошибка:
StatusCode: 401
Exception Message: The remote server returned an error: (401) Unauthorized.
System.Net.WebException: The remote server returned an error: (401) Unauthorized.
at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.GetResponse(WebRequest request)
at Microsoft.PowerShell.Commands.WebRequestPSCmdlet.ProcessRecord()
ПРИМЕЧАНИЕ: Когда я попробовал то же самое в почтальоне, я получаю список документов , но когда я пытался получить конкретный c документ. Я получаю сообщение об ошибке ниже.
Ошибка:
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:
К вашему сведению: я являюсь участником учетной записи Cosmodb в azure portal
Параметры:
$endpoint = "https://testcosmos.documents.azure.com:443/"
$MasterKey = "<Key from Cosmos db account>"
$KeyType = "master"
$TokenVersion = "1.0"
$date = Get-Date
$utcDate = $date.ToUniversalTime()
$xDate = $utcDate.ToString('r',
[System.Globalization.CultureInfo]::InvariantCulture)
$databaseId = "testdb"
$containerId = "containercollection"
$itemResourceType = "docs"
$ItemId="1"
$itemResourceId = "dbs/"+$databaseId+"/colls/"+$containerId+"/docs/"
$itemResourceLink = "dbs/"+$databaseId+"/colls/"+$containerId+"/docs/"
$verbMethod = "GET"
$header = @{
"authorization" = "$authKey";
"x-ms-version" = "2018-12-31";
"Cache-Control" = "no-cache";
"x-ms-date" = "$xDate"
"Accept" = "application/json";
"User-Agent" = "PowerShell-RestApi-Samples";
"x-ms-documentdb-partitionkey" = '["testPK"]'
}
Я пытался комментировать параметры заголовка "Принять", "Пользователь-агент", Cache-Control, но безуспешно. Я также попытался получить только список / docs без itemID, но это также оказалось напрасным.
$result = Invoke-RestMethod -Uri $requestUri -Headers $header -Method $verbMethod -ContentType "application/json"
Write-Host "Read item response = "$result
Обновленный код: Я наконец смог понять, почему возникает проблема. это ни проблема аутентификации, ни идентификатор ресурса. Я передаю ключ раздела в заголовках, которые не жестко запрограммированы в соответствии с образцом. Когда я передаю значение ключу раздела, он не принимает правильно, следовательно, вызывает проблему. Ниже мой динамик c Код передачи ключа раздела
"x-ms-documentdb-partitionkey" = '["$Partitionkey"]' -- Displaying as
[$Partitionkey] but it must print in headers like ["partitionkeyValue"]
Пытаюсь как это исправить. Большое спасибо за ваши предложения.