.NET Web API中Cosmos DB ReadItemAsync返回404求助
问题原因及解决方案
核心问题:分区键参数错误
你的ReadItemAsync调用中,传入的分区键是字符串"id"——这是分区键字段的名称,而非该条数据对应的分区键实际值,这直接导致精准查询找不到对应资源,返回404错误。
为什么ReadManyItemsAsync能正常工作?
ReadManyItemsAsync在分区键不匹配时,会自动触发跨分区查询(前提是容器允许跨分区查询),因此仍能定位到数据;但ReadItemAsync是严格的精准查询,必须传入完全匹配的分区键值,否则直接返回404。
解决方案
根据你提供的Cosmos数据资源管理器截图(截图内容:展示了一条id为1717482138的记录,分区键字段为id,对应的值就是1717482138),需将PartitionKey参数改为该记录的实际分区键值:
修正后的ReadItemAsync代码:
public async Task<OkObjectResult> All() { var client = CosmosService.GetClient(); var container = client.GetDatabase("Development").GetContainer("Notes"); // 使用记录的实际分区键值,而非字段名 var result = await container.ReadItemAsync<CosmosNote>("1717482138", new PartitionKey("1717482138")); return Ok(result); }
额外说明
如果你的容器分区键字段不是id(比如是userId这类字段),则需要传入对应字段的实际值。例如分区键字段为userId、值为user123时,代码应为:
var result = await container.ReadItemAsync<CosmosNote>("1717482138", new PartitionKey("user123"));
内容的提问来源于stack exchange,提问作者Abdullah Alhariri
相关产品推荐
相关产品推荐

