使用RestSharp对接FedEx OAuth2授权接口时AddParameter参数疑问
关于参数取值的说明
1. 第一个参数"undefined"的作用
当你使用RestSharp的AddParameter方法且指定ParameterType.RequestBody时,第一个参数(参数名)会被框架完全忽略,没有实际作用。
官方示例里的"undefined"只是自动生成示例代码时的占位值,你可以传入任意字符串,包括空字符串""都可以正常运行,不需要严格传入"undefined"。
2. input参数的取值
input就是FedEx OAuth授权要求的请求体JSON字符串,必须包含以下三个字段:
grant_type:固定值为"client_credentials"client_id:你在FedEx开发者控制台申请的API密钥(Client ID)client_secret:和Client ID配对的客户端密钥(Client Secret)
input的实际格式示例:
{ "grant_type": "client_credentials", "client_id": "你申请的FedEx Client ID", "client_secret": "你申请的FedEx Client Secret" }
可直接使用的优化代码示例
官方示例中额外添加的Authorization请求头是多余的,获取AccessToken本身不需要携带该头,该头是后续调用业务接口时才需要传入的参数,优化后代码如下:
// 定义请求体对应的实体类 public class FedExAuthRequest { [JsonPropertyName("grant_type")] public string GrantType { get; set; } = "client_credentials"; [JsonPropertyName("client_id")] public string ClientId { get; set; } [JsonPropertyName("client_secret")] public string ClientSecret { get; set; } } // 实际请求逻辑 var client = new RestClient("https://apis-sandbox.fedex.com/oauth/token"); var request = new RestRequest(Method.POST); request.AddHeader("X-locale", "en_US"); request.AddHeader("Content-Type", "application/json"); // 序列化得到请求体JSON var input = JsonSerializer.Serialize(new FedExAuthRequest { ClientId = "替换为你自己的Client ID", ClientSecret = "替换为你自己的Client Secret" }); // 第一个参数无实际作用,传空字符串即可 request.AddParameter("", input, ParameterType.RequestBody); IRestResponse response = client.Execute(request);
内容的提问来源于stack exchange,提问作者user13973251
相关产品推荐
相关产品推荐

