我使用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。
答案 0 :(得分:15)
回答您的问题
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
。
答案 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"}