如何从C#查询Cosmos DB集合

时间:2019-08-08 07:57:38

标签: asp.net-mvc azure c#-4.0 azure-cosmosdb

从C#连接到cosmosdb时出现以下错误。

输入的授权令牌无法满足请求。请检查是否根据协议构建了预期的有效负载,并检查所使用的密钥。服务器使用以下有效负载进行签名:

'get

    wed, 07 aug 2019 13:20:12 gmt

    ActivityId: 01489e82-0586-44d0-878d-0cc8cee22852, Microsoft.Azure.Documents.Common/2.5.1, Windows/10.0.15063 documentdb-netcore-sdk/2.4.0

using Microsoft.Azure.Documents.Client;
using System;
using System.Linq;

namespace DeviceCount
{
    class Program
    {
        private static readonly string EndpointUri = "aaaa";
        private static readonly string PrimaryKey = "bbb";
        private static readonly string DBName = "ccc";
        static void Main(string[] args)
        {
            DateTime currentTime = DateTime.Now;
            var currentEpochTime = (int)currentTime.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

            var currentTimeMinusOneH = DateTime.Now.AddHours(-1);

            var currentEpochTimeMinusOneH = (int)currentTimeMinusOneH.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

            ConnectionPolicy connectionPolicy = new ConnectionPolicy();
            connectionPolicy.ConnectionMode = ConnectionMode.Gateway;

            using (var client = new DocumentClient(new Uri(EndpointUri), PrimaryKey, connectionPolicy))
            {

                client.OpenAsync().Wait();


                var response = client.CreateDocumentQuery
               (UriFactory.CreateDocumentCollectionUri(DBName, "ddddd"),
                    "SELECT value count(c.id) FROM ddddd c where c._ts between " + currentEpochTime + " and " + currentEpochTimeMinusOneH).ToList();

                var document = response.First();
                Console.WriteLine($"Id:{document.id}");
                Console.ReadLine();

            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

似乎是令牌中的问题,因为该错误需要您在授权标头中为主令牌提供有效的签名哈希,才能对Cosmosdb执行REST调用。

签名哈希由REST动词,资源类型,资源ID和操作的UTC日期时间组成。您将需要为每个 operation 构建一个新的签名哈希。