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

使用RestSharp调用REST API遇unauthorized_client错误求助

解决RestSharp调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:08:28