web-dev-qa-db-ja.com

HttpGETを使用したRestSharpのメソッドAddParameterとAddQueryParameterの違い

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を生成するようです。

18
Nicholas

質問に答えるには

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を渡すようにしてください。

16
Fabio Salvalai

OPおよびコンセプトに問題がある可能性のある他の人に回答する。コンセプトを理解するのに時間がかかりました。おそらく、POST要求メッセージの作成に対するurlでGET要求メッセージを作成する方法のRESTful標準を視覚化する必要があります。

GETの場合、パラメーターはURLヘッダーに添付されますが、POSTの場合、パラメーターはメッセージの本文に配置されます。RestSharpのメソッドAddQueryParameter()は、メッセージのヘッダーに(Query)パラメーターのみを追加しますが、AddParameter()は、mesasge本体にパラメーターを追加するだけです。 POSTの場合、パラメーターcontact_nameおよびcompany_nameはメッセージ本文の下部にあります。

例えば:

GETメッセージ形式:

GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1ホスト:www.consumerdiarydemo.cbrnetwork.test.au接続:keep-alive Accept: 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 Accept:application/json、text/javascript、/; q = 0.01 X-Requested-With:XMLHttpRequest Content-Type:application/x-www-form-urlencoded; charset = UTF-8

{「contact_name」:「value_data1」、「company_name」:「value_data2」}

0
SmoothyBoothy