我正在使用带有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
但是当我运行它时,它给了我一个错误
{Microsoft.Azure.Documents.DocumentClientException:分区键 提供的任何一个不符合集合中的定义或 与文档中指定的分区键字段值不匹配。
答案 0 :(得分:2)
我明白了。我收到此错误的原因是因为我的集合中没有设置分区键。这就是我应该删除
的原因 new RequestOptions() { PartitionKey = new PartitionKey(name) }
删除后,它正常工作。