You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:51:00