web-dev-qa-db-fra.com

Différence entre les méthodes RestSharp AddParameter et AddQueryParameter à l'aide de HttpGET

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.

14
Nicholas

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.

15
Fabio Salvalai

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.

Par exemple:

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"}

0
SmoothyBoothy