繁体   English   中英

使用 HttpGET 的 RestSharp 方法 AddParameter 和 AddQueryParameter 之间的区别

[英]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 - 无法连接到远程服务器

AddParameterAddQueryParameter有什么区别?

根据文档,它们在使用 HttpGET 时应该具有相同的功能,并且根据 Fiddler 的说法,它们似乎也生成了相同的 URL。

回答你的问题

AddQueryParameter在查询字符串中添加一个参数为ParameterType.QueryStringAddParameter(string, object)将参数添加为ParameterType.GetOrPost

有关每种参数类型的更多详细信息,请参阅:

GetOrPosthttps ://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost

QueryStringhttps ://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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM