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

如何在使用Cosmos DB输入绑定的Azure Function中获取请求费用

解答

直接用输入绑定输出到Recipient这类强类型实体的时候,拿不到请求费用。
绑定底层会自动完成点查、实体映射的流程,原始的SDK响应对象不会透传到你的函数入参里,你拿到的只有映射完成的实体,自然读不到RequestCharge这类响应元数据。

你现在自己new CosmosClient的写法问题很大:一是硬编码连接字符串有泄露风险,二是每次函数触发都新建客户端实例,高并发下很容易把套接字占满触发异常,完全没必要这么写。
正确的做法是让输入绑定直接给你注入已经初始化好的单例CosmosClient,自己做读取操作就能拿到完整响应,既能取到RU消耗,还能复用客户端保证性能,代码如下:

[FunctionName("RecipientRead")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "recipient/{partitionKey}/{id}")] HttpRequest req,
    [CosmosDB(
        ConnectionStringSetting = "CosmosDbConnectionString")] CosmosClient cosmosClient,
    string id,
    string partitionKey,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    var container = cosmosClient.GetContainer("RecipientDatabase", "RecipientCollection");
    ItemResponse<Recipient> response = await container.ReadItemAsync<Recipient>(id, new PartitionKey(partitionKey));
    
    // 这里直接取请求费用
    double ruCharge = response.RequestCharge;
    log.LogInformation($"本次读取消耗{ruCharge} RU");

    return new OkObjectResult(response.Resource);
}

这种写法你除了能拿到RU消耗,还能拿到ETag、请求延迟、诊断信息等所有原始响应带的元数据,比直接绑定实体灵活很多。
如果你用的是老版本的Cosmos DB绑定(基于Microsoft.Azure.DocumentDB SDK),逻辑是一样的,把入参的CosmosClient换成DocumentClient,读取后从ResourceResponse里取RequestCharge就行。


内容的提问来源于stack exchange,提问作者Muhammad Ahmod

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 03:39:23