簡體   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