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

如何在C#中获取Xero API的调用限额响应头?

C# 获取Xero API响应头限额信息示例

当调用Xero的GetReportBalanceSheetAsync接口时,默认返回的仅为报表实体数据,若要获取X-DayLimit-Remaining、X-MinLimit-Remaining和X-AppMinLimit-Remaining这些限额头信息,需要获取完整的HTTP响应对象。以下是两种常见场景的代码示例:

使用Xero官方.NET SDK(Xero.NetStandard.OAuth2)

如果你的项目基于官方SDK开发,可以通过SendAsync方法获取包含响应头的ApiResponse对象:

using Xero.NetStandard.OAuth2.Client;
using Xero.NetStandard.OAuth2.Model.Reports;
using System.Threading;

// 初始化已完成认证的XeroClient(替换为你的实际初始化逻辑)
var xeroClient = new XeroClient(new XeroConfiguration
{
    ClientId = "你的ClientId",
    ClientSecret = "你的ClientSecret",
    // 其他必要配置项
});

// 构造余额表请求参数
var balanceSheetRequest = new GetReportBalanceSheetRequest
{
    Date = DateTime.UtcNow.Date,
    // 根据需求添加其他参数,如Periods、ComparePeriods等
};

// 发送请求并获取完整响应
var apiResponse = await xeroClient.SendAsync<Report>(balanceSheetRequest, CancellationToken.None);

// 提取限额头信息
if (apiResponse.HttpResponseMessage.Headers.TryGetValues("X-DayLimit-Remaining", out var dayLimit))
{
    Console.WriteLine($"剩余每日调用次数: {dayLimit.FirstOrDefault()}");
}

if (apiResponse.HttpResponseMessage.Headers.TryGetValues("X-MinLimit-Remaining", out var minLimit))
{
    Console.WriteLine($"剩余每分钟调用次数: {minLimit.FirstOrDefault()}");
}

if (apiResponse.HttpResponseMessage.Headers.TryGetValues("X-AppMinLimit-Remaining", out var appMinLimit))
{
    Console.WriteLine($"剩余应用每分钟调用次数: {appMinLimit.FirstOrDefault()}");
}

// 获取余额表实体数据
var balanceSheet = apiResponse.Body;

直接使用HttpClient调用API

若你未使用官方SDK,直接通过HttpClient请求Xero API,可以这样读取响应头:

using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;

var httpClient = new HttpClient();
// 设置OAuth2认证头
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer", 
    "你的Xero访问令牌"
);

// 构造余额表API请求地址(可根据需求添加查询参数)
var requestUrl = "https://api.xero.com/api.xro/2.0/Reports/BalanceSheet?Date=2024-05-20";

// 发送请求
var response = await httpClient.GetAsync(requestUrl);
response.EnsureSuccessStatusCode(); // 确保请求成功

// 提取限额头信息
if (response.Headers.TryGetValues("X-DayLimit-Remaining", out var dayLimit))
{
    Console.WriteLine($"剩余每日调用次数: {dayLimit.FirstOrDefault()}");
}

if (response.Headers.TryGetValues("X-MinLimit-Remaining", out var minLimit))
{
    Console.WriteLine($"剩余每分钟调用次数: {minLimit.FirstOrDefault()}");
}

if (response.Headers.TryGetValues("X-AppMinLimit-Remaining", out var appMinLimit))
{
    Console.WriteLine($"剩余应用每分钟调用次数: {appMinLimit.FirstOrDefault()}");
}

// 解析余额表JSON数据
var balanceSheetJson = await response.Content.ReadAsStringAsync();
// 替换为你定义的余额表实体类
var balanceSheet = JsonSerializer.Deserialize<BalanceSheetReport>(balanceSheetJson);

关键注意事项

  • 头字段名称严格区分大小写,必须与文档一致使用X-DayLimit-Remaining、X-MinLimit-Remaining、X-AppMinLimit-Remaining
  • 确保请求已通过Xero的OAuth2认证,否则会返回权限错误
  • 若使用旧版SDK,API方法可能略有差异,但核心逻辑都是通过获取完整的HttpResponseMessage来读取响应头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:50:25