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

时间:2015-09-18 02:54:46

标签: c# .net rest asp.net-web-api restsharp

我使用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。

2 个答案:

答案 0 :(得分:15)

回答您的问题

AddQueryParameter在查询字符串中添加ParameterType.QueryString参数,而AddParameter(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

答案 1 :(得分:0)

回答OP和其他可能遇到此问题的人。 我花了一些时间来探讨这个概念。 您可能需要可视化如何在URL中构造GET请求消息的RESTful标准,以防止构造POST请求消息。

您会注意到,对于GET,参数会附加到URL标头 而对于POST,参数放在消息正文中。 RestSharp的方法AddQueryParameter()只会在消息的头部添加(Query)参数,而AddParameter()只会将参数添加到mesasge主体。如下所示,GET有一个查询参数,其值为" Flavors" 。对于POST,参数contact_name和company_name位于邮件正文的底部。

例如

获取消息格式:

获取http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP / 1.1 主持人:www.consumerdiarydemo.cbrnetwork.test.au 连接:保持活力 接受:application / json User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36 (KHTML,像Gecko一样)Chrome / 58.0.3029.110 Safari / 537.36 推荐人:http://www.consumerdiarydemo.cbrnetwork.test.au/ConsumerDiaryPage2template Accept-Encoding:gzip,deflate,sdch Accept-Language:en-GB,en-US; q = 0.8,en; q = 0.6

POST邮件格式:

POST http://localhost:1234567/api/customers HTTP / 1.1 接受:application / json,text / javascript, / ; Q = 0.01 X-Requested-With:XMLHttpRequest 内容类型:application / x-www-form-urlencoded;字符集= UTF-8

{" CONTACT_NAME":" value_data1"" COMPANY_NAME":" value_data2"}