使用RestSharp通过GET方法发送x-www-form-urlencoded参数异常求助
解决RestSharp调用GET API时参数未正确发送的问题
问题分析
你的API要求GET请求携带x-www-form-urlencoded格式的请求体(这虽不符合标准HTTP规范,但部分API会如此实现)。curl和Python requests默认支持在GET请求中发送请求体,但RestSharp默认会将GET请求的参数放到URL的QueryString中,不会写入请求体,这就是API提示参数未发送的核心原因。另外你原代码的URL中存在拼写错误:generId应为genreId,这也可能导致参数识别异常。
修正方案
以下两种方式均可让RestSharp在GET请求中正确发送x-www-form-urlencoded格式的请求体:
方案1:指定参数位置为请求体
var options = new RestClientOptions("https://domain.net.xyz") { MaxTimeout = -1 }; var client = new RestClient(options); // 移除URL中的冗余参数,避免重复传递 var request = new RestRequest("/rsBillingApi/v2/soapbox/liveassets/genre", Method.Get); request.AddHeader("x-access-token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTUyNTE4LCJpYXQiOjE2OTkzNTEwOTYsImV4cCI6MTY5OTM1NDY5Nn0.xrvQZCRdQImwKtbnAeeRzhi2M9yW2W6RJR6xlU0hgts"); // 明确指定参数放入请求体,RestSharp会自动设置Content-Type为application/x-www-form-urlencoded request.AddParameter("genreId", "3", ParameterType.RequestBody); request.AddParameter("platformId", "1", ParameterType.RequestBody); RestResponse response = await client.ExecuteAsync(request); Console.WriteLine(response.Content);
方案2:直接构造请求体字符串
var options = new RestClientOptions("https://domain.net.xyz") { MaxTimeout = -1 }; var client = new RestClient(options); var request = new RestRequest("/rsBillingApi/v2/soapbox/liveassets/genre", Method.Get); request.AddHeader("x-access-token", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTUyNTE4LCJpYXQiOjE2OTkzNTEwOTYsImV4cCI6MTY5OTM1NDY5Nn0.xrvQZCRdQImwKtbnAeeRzhi2M9yW2W6RJR6xlU0hgts"); // 直接构造x-www-form-urlencoded格式的字符串并指定内容类型 request.AddStringBody("genreId=3&platformId=1", ContentType.FormUrlEncoded); RestResponse response = await client.ExecuteAsync(request); Console.WriteLine(response.Content);
关键注意事项
- 必须显式指定参数位置为请求体,或直接构造请求体字符串,否则RestSharp会将GET请求的参数自动放入URL的QueryString中,无法被你的API识别。
- 务必修正URL中的
generId拼写错误为genreId,避免因参数名不匹配导致的异常。
内容的提问来源于stack exchange,提问作者Sachin Maharjan
相关产品推荐
相关产品推荐

