[英]Difference between RestSharp methods AddParameter and AddQueryParameter using HttpGET
我正在使用 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);
导致:
System.Exception:API 调用 MyWebAPIMethod GET:失败,状态码 0 - 无法连接到远程服务器
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 请求消息而不是构造 POST 请求消息的 RESTful 标准。
您会注意到,对于 GET ,参数附加到 URL 标头,而对于 POST ,参数放置在消息正文中。 RestSharp 的 AddQueryParameter() 方法只会在消息头中添加 (Query) 参数,而 AddParameter() 只会将参数添加到消息正文中。 如下所示,GET 有一个值为 "Flavors" 的查询参数。 对于 POST ,参数 contact_name 和 company_name 位于消息正文的底部。
获取消息格式:
GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1 主机:www.consumerdiarydemo.cbrnetwork.test.au 连接:keep-alive 接受:application/json 用户代理: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Referer: http://www.consumerdiarydemo.cbrnetwork.test.au/ConsumerDiaryPage2template Accept-Encoding: gzip, deflate, sdch 接受语言:en-GB,en-US;q=0.8,en;q=0.6
POST 消息格式:
POST http://localhost:1234567/api/customers HTTP/1.1 Accept: application/json, text/javascript, / ; q=0.01 X-Requested-With: XMLHttpRequest Content-Type: application/x-www-form-urlencoded; 字符集=UTF-8
{"contact_name":"value_data1","company_name":"value_data2"}
添加参数/获取或发布
GetOrPost
的行为因方法而异。 如果您执行 GET 调用,RestSharp 会将参数以url?name1=value1&name2=value2
的形式附加到 Url。
在 POST 或 PUT 请求中,这取决于您是否有附加到请求的文件。 如果没有,参数将作为请求的主体以name1=value1&name2=value2
的形式发送。
参考: https ://restsharp.dev/usage.html#get-or-post
AddQueryParameter / 查询字符串
QueryString
的工作方式与GetOrPost
类似,但它始终以url?name1=value1&name2=value2
的形式将参数附加到 url,而不管请求方法如何。
参考: https ://restsharp.dev/usage.html#query-string
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.