Cosmos DB的分区键

时间:2018-02-26 20:31:46

标签: api azure asp.net-core azure-cosmosdb database-partitioning

我正在使用带有Cosmos DB的ASP.NET Core构建一个restful API。有一个需要分区键的GetItemById请求。

 public static async Task<T> GetItemAsync(string itemId, string name)
    {
        try
        {
            Document document =
                await client.ReadDocumentAsync(UriFactory.CreateDocumentUri(DatabaseId, CollectionId, itemId),
                    new RequestOptions() { PartitionKey = new PartitionKey(name) });

            return (T)(dynamic)document;
        }
        catch (DocumentClientException e)
        {
            if (e.StatusCode == System.Net.HttpStatusCode.NotFound)
            {
                return null;
            }
            else
            {
                throw;
            }
        }
    }

GetByIdAsync()函数调用此GetItemAsync()方法。

    [HttpGet("{itemId}")]
    public async Task<IActionResult> GetByIdAsync(string itemId, string name)
    {
        var item = await DocumentDBRepository<TodoItem>.GetItemAsync(itemId, name);
        if (item == null)
        {
            return NotFound();
        }
        return new ObjectResult(item);
    }

网址为http://localhost:54084/api/todo/f323307b-142f-46f3-9072-12f41cc74e87

我的Azure CosmosDB容器如下所示: enter image description here

但是当我运行它时,它给了我一个错误

  

{Microsoft.Azure.Documents.DocumentClientException:分区键   提供的任何一个不符合集合中的定义或   与文档中指定的分区键字段值不匹配。

1 个答案:

答案 0 :(得分:2)

我明白了。我收到此错误的原因是因为我的集合中没有设置分区键。这就是我应该删除

的原因

new RequestOptions() { PartitionKey = new PartitionKey(name) }

删除后,它正常工作。