使用HttpGET的RestSharp方法AddParameter和AddQueryParameter的区别
本文关键字:AddQueryParameter AddParameter 区别 方法 HttpGET RestSharp 使用 | 更新日期: 2023-09-27 18:13:11
我正在使用RestSharp调用外部API。
如此:
var client = new RestClient(apiUrl);
var request = new RestRequest(myurl, Method.GET);
foreach (var param in parameters)
{
request.AddQueryParameter(param.Key, param.Value);
}
var response = client.Execute(request);
这并不:
var client = new RestClient(apiUrl);
var request = new RestRequest(myurl, Method.GET);
foreach (var param in parameters)
{
request.AddParameter(param.Key, param.Value);
}
var response = client.Execute(request);
导致:
系统。异常:API Call MyWebAPIMethod GET: Failed with status code0 -无法连接到远程服务器
AddParameter
和AddQueryParameter
的区别是什么?
根据文档,当使用HttpGET时,它们应该具有相同的功能,并且根据Fiddler,它们似乎也会生成相同的URL
回答你的问题
AddQueryParameter
在查询字符串中添加参数为ParameterType.QueryString
, AddParameter(string, object)
添加参数为ParameterType.GetOrPost
有关每种参数类型的详细信息,请参见:
GetOrPost
: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost
QueryString
: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#querystring
解决你的问题
似乎与参数的类型无关,因为抛出的异常似乎表明您甚至没有连接到远程服务器。
确保在两种情况下传递相同的apiUrl
/myUrl
回答OP和其他可能对这个概念有困难的人。我花了一段时间才理解这个概念。您可能需要可视化如何在url中构造GET请求消息的RESTful标准,而不是构造POST请求消息。
您将注意到,对于GET,参数附加到URL报头而对于POST,参数放置在消息体中。RestSharp的方法AddQueryParameter()只会在消息头中添加(Query)参数,而AddParameter()只会在消息体中添加参数。如下所示,GET有一个值为"flavors"的查询参数。对于POST,参数contact_name和company_name位于消息体的底部。
,
GET消息格式:
GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1主持人:www.consumerdiarydemo.cbrnetwork.test.au连接:维生接受:application/json用户代理:Mozilla/5.0 (Windows NT 10.0;Win64;x64) AppleWebKit/537.36(KHTML,像壁虎)Chrome/58.0.3029.110 Safari/537.36推荐人:http://www.consumerdiarydemo.cbrnetwork.test.au/ConsumerDiaryPage2templateAccept-Encoding: gzip, deflate, sdch接收语言:en - en - us; q = 0.8, en; q = 0.6
POST消息格式:
文章http://localhost: 1234567/api/客户HTTP/1.1接受:application/json, text/javascript, /;q = 0.01X-Requested-With: XMLHttpRequest内容类型:应用程序/x-www-form-urlencoded;utf - 8字符集=
{"contact_name":"value_data1"、"company_name":"value_data2"}
AddParameter/Get or Post
GetOrPost
根据方法的不同表现不同。如果您执行GET调用,RestSharp将以url?name1=value1&name2=value2
的形式将参数附加到Url。
在POST或PUT请求中,这取决于您是否将文件附加到请求中。如果没有,参数将以name1=value1&name2=value2
的形式作为请求的主体发送。
裁判:https://restsharp.dev/usage.html get或post
AddQueryParameter/Query String
QueryString
的工作方式与GetOrPost
类似,除了它总是将参数附加到url?name1=value1&name2=value2
形式的url中,无论请求方法如何。
裁判:https://restsharp.dev/usage.html查询字符串