• 0
Melde dich an, um diesem Inhalt zu folgen  
Folgen diesem Inhalt 0

C# REST WebAPI Client mit RestSharp Problem...

Frage

Hallo liebe Entwicklerfreunde.

Ich beschäftige mich momentan ein bisschen mit REST WebAPI sowie der Anbindung mittels UnitOfWork / Repository pattern.
Dazu habe ich mir einen Selfhosted Server basierend auf den von Microsoft verfügbaren Selfthosted WebAPI Bibliotheken gebaut sowie eine Client Applikation
die mittels restsharp Bibliothek an jenen Server Daten senden soll.

Folgendes Problem tut sich auf:
Beim POST landet der request vom Client zwar beim richtigen Controller, das übergebene Objekt habt aber immer leere Werte.
Führe ich den POST beim Server mit der Chrome Erweiterung "ARC(Advanced REST Client)" aus klappt das einwandfrei.
Beim client debuggen habe ich mir den serialiserten JSON String aus dem request gezogen und in die Chrome Erweiterung kopiert. 
Der JSON String ist gültig und wird von dort aus auch beim Server akzeptiert.

Sämtliche CRUD Methoden funktionieren mit dem Advanced REST Client, daher denke ich ist hier die Server Seite auszuschließen.


Hier der entsprechende Code aus der ApiController Klasse:

[HttpPost]
public HttpResponseMessage Post([FromBody]LiquidBase _liquidBase)
{
    repo.InsertOrUpdate(_liquidBase);
	repo.Save();
	
	return new HttpResponseMessage(HttpStatusCode.OK);
}

_liquidBase hat hier in dem Fall immer Nullwerte sobald ich etwas vom Client aus POST(e).

 

Hier die Funktion welche beim Client den POST übernimmt.

internal ResponseMessage PostLiquidBase(LiquidBase _liquidBase)
{
	RestClient client = getAuthenticatedClient(config);
	RestRequest request = new RestRequest("api/LiquidBase", Method.POST);

	string data = JsonConvert.SerializeObject(_liquidBase);
	data = data.Replace("\"Id\":0,", string.Empty);

	request.AddParameter("application/json", data, ParameterType.RequestBody);
	request.RequestFormat = DataFormat.Json;

	return GetWebResponse(client, request);
}

GetWebResponse(client, request) executed das ganze dann nur noch 

 IRestResponse response = client.Execute(request);

und wertet die response dann weiter aus. Ist hier aber nicht weiter wichtig da es ja ab dem execute, bzw dem Empfang beim Server irgendwo schief läuft.

Ich hoffe jemand weiß weiter.

Euer Tehrob

bearbeitet von Tehrob

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

1 Antwort auf diese Frage

  • 0

Ich setzte in der Entwicklung immer den Fiddler ein, um mir die Inhalte zwischen Client und Server anzuschauen. Ggf. Auch einen anderen Proxy. Damit lassen sich nicht nur die Inhalte sondern auch die Header schnell kontrollieren.

Probiere es mal mit einer Post-Methode ohne Parameter und schaue dir den Content an, ob da was drin ist.
Dann kannst du den String selbst auslesen und manuell parsen. Vielleicht hast du dann ja auch schon dein Problem gefunden.

Eine Frage am Rande : warum setzt du nicht die http-client Bibliothek und json.net ein? Ersteres bietet mehr Möglichkeiten aus der Webrequest und letzteres ist performanter als die enthaltene Logik und wird darüber hinaus auf dem Server sowieso verwendet.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Gast
Du kommentierst als Gast. Wenn du bereits einen Account hast kannst du dich hier anmelden.
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoticons maximum are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

Melde dich an, um diesem Inhalt zu folgen  
Folgen diesem Inhalt 0