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を生成するようです。
質問に答えるには
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
を渡すようにしてください。
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」}