J'utilise RestSharp pour appeler une API externe.
Cela marche:
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);
Cela ne veut pas:
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);
Résultant en:
System.Exception: Appel d'API MyWebAPIMethod GET: Échec avec le code d'état 0 - Impossible de se connecter au serveur distant
Quelle est la différence entre AddParameter
et AddQueryParameter
?
Selon la documentation, ils devraient fonctionner de la même manière avec HttpGET et selon Fiddler, ils semblent également générer la même URL.
Pour répondre à ta question
AddQueryParameter
ajoute un paramètre dans la chaîne de requête sous la forme ParameterType.QueryString
alors que AddParameter(string, object)
ajoute le paramètre sous la forme ParameterType.GetOrPost
Pour plus de détails sur chaque type de paramètre, voir:
GetOrPost
: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost
QueryString
: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#querystring
Pour résoudre votre problème
Il semble que cela ne soit pas lié au type de paramètre, car l'exception levée semble indiquer que vous ne vous connectez même pas au serveur distant.
assurez-vous de passer les mêmes apiUrl
/myUrl
dans les deux cas.
Pour répondre au PO et à tous ceux qui pourraient avoir des problèmes avec le concept ... Il m'a fallu un certain temps pour me familiariser avec le concept ... Vous devez probablement visualiser le standard RESTful de la manière de construire un message de requête GET dans un fichier. url contre la construction d'un message de demande POST.
Vous remarquerez que pour GET, le ou les paramètres sont attachés à l’en-tête de l’URL Tandis que pour POST, les paramètres sont placés dans le corps du message . RestSharp La méthode AddQueryParameter () ajoutera uniquement les paramètres (Query) dans l'en-tête du message, alors que AddParameter () ajoutera uniquement les paramètres au corps du mesasge. Comme démontré ci-dessous, GET a un paramètre de requête avec la valeur "Flavors". Pour le POST, les paramètres nom_du_ contact et nom_entreprise se trouvent au bas du corps du message.
Format de message GET:
GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1 Hôte: www.consumerdiarydemo.cbrnetwork.test.au Connexion: garder: alive Accepter: application/json Utilisateur-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/58.0.3029.110 Safari/537.36 Referer: 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 format du message:
POST http: // localhost: 1234567/api/clients HTTP/1.1 Accepter: application/json, text/javascript, /; q = 0,01 X-Requested-With: XMLHttpRequest Content-Type: application/x-www-form-urlencoded; jeu de caractères = UTF-8
{"contact_name": "value_data1", "company_name": "value_data2"}