Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.