【发布时间】:2018-09-25 13:32:56
【问题描述】:
我正在使用 CosmosDb Sdk 和 nuget Microsoft.Azure.DocumentDB.Core 2.1.0 和 .NetStandard 2.0。
我正在使用此查询来获取文档
var client client = new DocumentClient(new Uri(config.CosmosDbEndPointUrl), config.CosmosDbPrimaryKey);
var partitionKey = "siteId"; // the partition key is defined as /siteId, I tried both, still not working
var queryOptions = new FeedOptions
{
MaxItemCount = 500,
EnableCrossPartitionQuery = true,
PartitionKey = new PartitionKey(partitionKey)
};
var auditQuery = client
.CreateDocumentQuery<AuditDTO>(
UriFactory.CreateDocumentCollectionUri(_databaseName, _collectionName), queryOptions)
.Where(f => f.Status == AuditStatus.Pending)
.AsDocumentQuery();
var results = new List<AuditDTO>();
while (auditQuery.HasMoreResults)
{
var audits = await auditQuery.ExecuteNextAsync<AuditDTO>();
results.AddRange(audits);
}
此查询返回 0 个文档。
我的查询基于this tutorial
我认为有些参数不正确所以我尝试使用Rest Api,代码基于this example(见评论EXECUTE a query)
var client = new System.Net.Http.HttpClient();
string response = string.Empty;
string authHeader = string.Empty;
string verb = string.Empty;
string resourceType = string.Empty;
string resourceId = string.Empty;
string resourceLink = string.Empty;
client.DefaultRequestHeaders.Add("x-ms-date", utc_date);
client.DefaultRequestHeaders.Add("x-ms-version", "2017-02-22");
verb = "POST";
resourceType = "docs";
resourceLink = $"dbs/{databaseId}/colls/{collectionId}/docs";
resourceId = (idBased) ? $"dbs/{databaseId}/colls/{collectionId}" : collectionId.ToLowerInvariant();
authHeader = GenerateMasterKeyAuthorizationSignature(verb, resourceId, resourceType, masterKey, "master", "1.0");
client.DefaultRequestHeaders.Remove("authorization");
client.DefaultRequestHeaders.Add("authorization", authHeader);
client.DefaultRequestHeaders.Add("x-ms-documentdb-isquery", "True");
client.DefaultRequestHeaders.Add("x-ms-documentdb-query-enablecrosspartition", "true");
client.DefaultRequestHeaders.Add("x-ms-partition-key", "[\"siteId\"]");
var qry = new SqlQuerySpec { query = "SELECT * FROM root WHERE (root[\"status\"] = 0)" };
var r = await client.PostWithNoCharSetAsync(new Uri(baseUri, resourceLink), qry);
var s = await r.Content.ReadAsStringAsync();
如我所料,使用 Rest Api 返回 1 个文档。
我尝试反序列化对类 AuditDTO 的响应,它可以工作,所以我的模型没有问题。
我不明白为什么 Rest Api 有效,而不是 .Net Sdk。
没有授权异常,没有错误信息。我只得到 0 个文档。
我错过了什么?
【问题讨论】:
标签: c# azure azure-cosmosdb