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

Xamarin Forms+RestSharp Bearer授权请求返回未授权问题排查

问题分析与解决建议

同样的请求在Postman中能正常执行,但在Xamarin Forms移动应用里用RestSharp发起GET请求时,服务器返回Unauthorized(未授权),相关代码如下:

var options = new RestClientOptions(MyBaseEndpoint)
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest(MyEndpoint, Method.Get);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer MyToken");
var body = MyJson;
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);

下面是几个高概率的问题点和解决办法:

  • GET请求带请求体不符合HTTP规范:
    很多服务器会严格遵循HTTP标准,拒绝GET请求携带请求体。Postman可能对这种情况做了兼容,但RestSharp或服务器端不会认可这种非标准请求。这是最常见的原因。
    解决:如果接口允许,把请求方法改成POST;如果必须用GET,把请求体里的参数拆解成URL查询参数(比如?key1=value1&key2=value2),用request.AddQueryParameter()添加。

  • Authorization头格式错误:
    检查MyToken是否正确替换,确保最终的头内容是Bearer 你的令牌内容,没有多余空格、换行或特殊字符。可以在代码里输出日志查看实际发送的头,和Postman里的内容对比。
    解决:打印request.Headers里的Authorization项,确认和Postman完全一致,修正令牌内容或格式。

  • 多余的Content-Type头:
    GET请求本身不应该有请求体,设置Content-Type: application/json属于多余操作,部分服务器会因为这个不符合预期的头拒绝请求。
    解决:删掉request.AddHeader("Content-Type", "application/json");这一行代码。

  • RestSharp版本问题:
    不同版本的RestSharp处理请求体、请求头的逻辑可能有差异,比如旧版本对GET请求加请求体的处理存在bug。
    解决:升级RestSharp到最新稳定版,或者对照你当前版本的官方文档调整代码。

  • 平台网络配置限制:
    Xamarin Forms在Android/iOS平台可能有网络安全限制,比如Android的网络安全策略拦截了请求头,或者iOS的ATS限制导致请求异常。
    解决:检查Android项目的network_security_config.xml,确保允许访问目标域名;iOS项目检查ATS设置,确认没有限制请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:42:47