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

如何使用RestSharp v106.6.10(.NET Core 2.2)发送带请求体的GET请求

解决RestSharp v106.6.10中GET请求带请求体的问题

我完全理解你的需求——当复杂参数没法优雅塞进QueryString时,用GET请求带请求体确实是合理的选择,毕竟把大段JSON拼在URL里既不美观也容易出问题。你遇到的{"A non-empty request body is required."}错误,本质是RestSharp默认会拦截GET请求的请求体,这是它遵循常见HTTP实践的默认行为,但我们可以绕过这个限制。

解决方案:手动指定请求体参数

RestSharp的AddJsonBody方法在处理GET请求时会自动跳过添加请求体,所以我们需要换一种方式手动添加:

var client = new RestClient("BaseUri");
var request = new RestRequest("URL", Method.GET);

// 1. 手动序列化请求体(需要引用Newtonsoft.Json)
var serializedBody = Newtonsoft.Json.JsonConvert.SerializeObject(Body);

// 2. 显式添加请求体参数,指定类型为RequestBody
request.AddParameter("application/json", serializedBody, ParameterType.RequestBody);

// 执行请求
var response = client.Execute(request);

如果上面的方法仍不生效:直接操作WebRequest

如果RestSharp的参数机制还是不生效,我们可以直接通过ConfigureWebRequest方法手动写入请求体:

var client = new RestClient("BaseUri");
var request = new RestRequest("URL", Method.GET);
var serializedBody = Newtonsoft.Json.JsonConvert.SerializeObject(Body);

client.ConfigureWebRequest(webRequest =>
{
    // 设置Content-Type
    webRequest.ContentType = "application/json";
    // 开启请求流写入
    webRequest.ContentLength = serializedBody.Length;
    
    using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))
    {
        streamWriter.Write(serializedBody);
    }
});

var response = client.Execute(request);

为什么会出现这个问题?

RestSharp的默认设计是遵循大多数HTTP客户端的惯例:虽然HTTP规范并没有明确禁止GET请求带请求体,但很多服务器和工具会忽略这种请求的请求体,所以RestSharp默认会过滤掉GET请求的请求体内容。但既然你已经确认服务器支持这种用法(WebClient、Postman都能正常工作),那通过上面的方法就能让RestSharp兼容这个场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:32:23