it-swarm.com.de

Unterschied zwischen den RestSharp-Methoden AddParameter und AddQueryParameter mit HttpGET

Ich benutze RestSharp, um eine externe API aufzurufen.

Das funktioniert:

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);

Das tut nicht:

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);

Ergebend:

System.Exception: API-Aufruf MyWebAPIMethod GET: Fehler mit Statuscode 0 - Keine Verbindung zum Remote-Server möglich

Was ist der Unterschied zwischen AddParameter und AddQueryParameter?

Laut der Dokumentation sollten sie bei Verwendung von HttpGET gleich funktionieren und laut Fiddler scheinen sie auch die gleiche URL zu generieren.

14
Nicholas

Zur Beantwortung Ihrer Frage

AddQueryParameter fügt einen Parameter in der Abfragezeichenfolge als ParameterType.QueryString hinzu, wohingegen AddParameter(string, object) den Parameter als ParameterType.GetOrPost hinzufügt. 

Weitere Informationen zu jedem Parametertyp finden Sie unter:

GetOrPost: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost

QueryString: https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#querystring

Um Ihr Problem zu lösen

Es hat den Anschein, dass es nicht mit dem Parametertyp zusammenhängt, da die ausgelöste Ausnahme zu bedeuten scheint, dass Sie nicht einmal eine Verbindung zum Remote-Server herstellen.

stellen Sie sicher, dass Sie in beiden Fällen dieselbe apiUrl/myUrl übergeben.

15
Fabio Salvalai

Um das OP und alle anderen Personen, die Probleme mit dem Konzept haben könnten, zu beantworten ... Es dauerte eine Weile, bis ich zum Konzept kam. Sie müssen sich wahrscheinlich den RESTful-Standard für die Erstellung einer GET-Anforderungsnachricht in einer URL gegen Erstellung einer Anforderungsnachricht POST.

Sie werden feststellen, dass für GET die Parameter an den URL-Header Angehängt werden, wohingegen bei POST die Parameter im Nachrichtentext . RestSharp platziert werden Die Methode AddQueryParameter () fügt nur die (Query) -Parameter im Header der Nachricht hinzu, wohingegen AddParameter () nur die Parameter zum Nachrichtentext hinzufügt. Wie unten gezeigt, verfügt das GET über einen Abfrageparameter mit dem Wert "Flavors". Bei POST befinden sich die Parameter contact_name und company_name im unteren Teil des Nachrichtentexts.

Z.B:

GET-Nachrichtenformat:

GET http://www.consumerdiarydemo.cbrnetwork.test.au/api/ConsumerDiary/getSizesOrFlavours/Flavours HTTP/1.1 Host: www.consumerdiarydemo.cbrnetwork.test.au Verbindung: keep- alive Akzeptieren: application/json Benutzeragent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML wie Gecko) Chrome/58.0.3029.110 Safari/537.36 Referer: http://www.consumerdiarydemo.cbrnetwork.test.au/ConsumerDiaryPage2template Accept-Encoding: gzip, deflate, sdch Accept-Language: de-GB, en-US; q = 0,8, en; q = 0,6


POST Nachrichtenformat:

POST http: // localhost: 1234567/api/customers HTTP/1.1 Akzeptieren: application/json, Text/Javascript, /; q = 0,01 X-Requested-With: XMLHttpRequest Inhaltstyp: application/x-www-form-urlencoded; Zeichensatz = UTF-8

{"contact_name": "value_data1", "company_name": "value_data2"}

0
SmoothyBoothy