使用RestSharp调用REST API遇unauthorized_client错误求助
嘿,我看你用RestSharp构建REST API客户端时,一直收到{"error":"unauthorized_client"}的响应,咱们来看看问题出在哪,怎么解决~
先贴出你的原代码:
var client = new RestClient("https://url.com"); client.Authenticator = new SimpleAuthenticator("client_id", "testapi", "client_secret", "password"); var request = new RestRequest("webapi/rest/auctions", Method.GET); request.AddParameter("limit", "10"); request.AddParameter("order", "auction_id"); request.AddParameter("page", "1"); request.AddParameter("offset", "0"); IRestResponse response = client.Execute(request); Console.WriteLine("request: " + response.Content);
问题分析
根据你提供的API文档信息,这个API采用的是OAuth 2.0客户端凭证认证模式,而你现在用的SimpleAuthenticator并不适配这种认证方式——它只是简单地把认证参数附加到请求里,但该API要求你先获取访问令牌,再用令牌来发起后续请求,这就是为什么会返回未授权的错误。
修正后的代码步骤
第一步:获取访问令牌
首先需要向API的令牌端点发送POST请求,拿到有效的访问令牌:
var tokenClient = new RestClient("https://url.com"); var tokenRequest = new RestRequest("/oauth/token", Method.POST); // 添加客户端凭证模式所需的必填参数 tokenRequest.AddParameter("grant_type", "client_credentials"); tokenRequest.AddParameter("client_id", "testapi"); tokenRequest.AddParameter("client_secret", "password"); // 替换成你的真实client_secret var tokenResponse = tokenClient.Execute(tokenRequest); // 用JSON库解析响应获取access_token(这里以Newtonsoft.Json为例) var tokenResult = JsonConvert.DeserializeObject<TokenResponse>(tokenResponse.Content); string accessToken = tokenResult.AccessToken; // 定义辅助类用于解析令牌响应 public class TokenResponse { [JsonProperty("access_token")] public string AccessToken { get; set; } [JsonProperty("token_type")] public string TokenType { get; set; } [JsonProperty("expires_in")] public int ExpiresIn { get; set; } }
第二步:使用访问令牌请求拍卖数据
拿到令牌后,在请求拍卖接口时添加Authorization请求头即可:
var client = new RestClient("https://url.com"); var request = new RestRequest("webapi/rest/auctions", Method.GET); // 添加Bearer令牌认证头 request.AddHeader("Authorization", $"Bearer {accessToken}"); // 添加业务参数 request.AddParameter("limit", "10"); request.AddParameter("order", "auction_id"); request.AddParameter("page", "1"); request.AddParameter("offset", "0"); IRestResponse response = client.Execute(request); Console.WriteLine("response: " + response.Content);
额外提示
- 先确认你的
client_id和client_secret是API服务商提供的有效凭证,这是出现unauthorized_client最常见的原因 - 如果API的令牌端点不是
/oauth/token,请替换成文档里指定的正确地址 - 建议对令牌做缓存处理,避免每次请求都重新获取(令牌有有效期,到期后再重新请求即可)
内容的提问来源于stack exchange,提问作者Damian
相关产品推荐
相关产品推荐

