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

RestClient设置Request超时仍触发100秒HttpClient超时求助

问题:RestRequest自定义超时不生效,触发HttpClient默认100秒超时

我的代码片段截至昨天运行正常,但今早日志出现以下错误:

response.ErrorException = {"The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing."}

明明我创建RestRequest时设置了另一超时时间,为什么错误里显示的是100秒超时?

代码如下:

var client = new RestClient();
client.Options.BaseUrl = new Uri(url);
var request = new RestRequest("api/hello", Method.Get) { Timeout = (int)TimeSpan.FromSeconds(300000).TotalMilliseconds };
request.AddHeader("Authorization", "Bearer " + token);
request.AddHeader("Content-Type", "application/json");
var response = await client.ExecuteAsync(request);

补充:使用RestClient 108.0.3版本。


解答

核心原因

RestClient 10.x版本(含108.0.3)底层依赖HttpClient,而HttpClient默认全局超时为100秒。当RestRequest.Timeout设置的时长大于HttpClient的超时值时,实际生效的是HttpClient的100秒超时,这就是你看到错误提示的原因。

另外你的代码里还有个明显的数值错误:TimeSpan.FromSeconds(300000)等于300000秒(约5000分钟),这显然是不合理的超时设置,大概率是笔误(比如想设置30秒)。但即使数值合理,只要超过HttpClient的100秒默认限制,依然会触发100秒超时。

解决办法

  1. 同步调整HttpClient和RestRequest的超时值
    初始化RestClient时,通过RestClientOptions设置全局超时,确保它大于或等于RestRequest的超时:

    // 示例:设置全局超时为30秒,同时修正Request的超时值
    var client = new RestClient(new RestClientOptions(url)
    {
        Timeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds
    });
    var request = new RestRequest("api/hello", Method.Get) 
    { 
        Timeout = (int)TimeSpan.FromSeconds(30).TotalMilliseconds 
    };
    
  2. 若需超长超时,需同时设置HttpClient为无限超时
    如果确实需要超过100秒的超时,要将HttpClient的超时设为无限,再设置RestRequest的具体超时:

    var client = new RestClient(new RestClientOptions(url)
    {
        Timeout = -1 // 对应无限超时
    });
    var request = new RestRequest("api/hello", Method.Get) 
    { 
        Timeout = (int)TimeSpan.FromMinutes(10).TotalMilliseconds // 比如10分钟
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:37:29