如何在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
相关产品推荐
相关产品推荐

