Ich habe ein "Person" ADO.Net-Entity-Modell erstellt und "gerüst" einen Web-API-Controller daraus. Das Entitätsmodell ist verschachtelt, da es ein Array anderer Objekte enthält.WebAPI-Parameter null
Da diese verschachtelten Objekte eine Eigenschaft enthalten, die auf ihre Eltern verweist, sind sie nicht serialisierbar. Also habe ich eine "JSON_Person" -Klasse erstellt, in die ich das Person-Objekt und seine verschachtelten Eigenschaften kopieren konnte (abzüglich der Referenz der verschachtelten Objekte auf ihre Eltern), damit sie mit der GET-Methode abgerufen werden konnten.
Bis zu diesem Zeitpunkt funktionierte alles wie erwartet. Ich könnte eine GET-Anfrage an die API machen und ein Array von JSON-Objekten erhalten, jedes mit einem eigenen Array von verschachtelten Objekten. Ich könnte auch eine PUT-Anfrage an die API machen und einen Datensatz aktualisieren.
Auch wenn die PUT-Methode akzeptiert ein „Person“ Objekt und nicht ein „JSON_Person“, es funktioniert, weil (ich nehme an) die JSON_Person und Eigenschaften der Person auf 1 bis 1 entsprechen
jedoch nach Änderung des Parameters Geben Sie von Person zu JSON_Person ein, der Parameter in der API zeigt jetzt immer null an.
Ich habe gesagt, dass es wahrscheinlich eine "Typumwandlung scheitern", aber es scheint mir unwahrscheinlich, da selbst wenn GET das Objekt und dann PUT es gleich wieder unverändert, es immer noch fehlschlägt.
Dinge, die ich habe versucht:
- Hinzufügen [FromBody] zu dem API-Parameter.
- Ändern der "contentType: 'Anwendung/json; charset = utf-8'" im jQuery.ajax Aufruf.
- Alle Eigenschaften auf null setzen, bevor sie an die Testtypkonvertierung gesendet werden.
AJAX Aufruf
$.ajax({
type: "PUT",
url: "/api/person/" + selected.Id,
data: JSON.stringify(selected),
contentType: 'application/json; charset=utf-8',
success: function() {},
error: function() {
return alert("error");
}
});
Put Methode
[ResponseType(typeof(void))]
public IHttpActionResult PutPerson(int id, JSON_Person json_Person)
{
// Convert JSON_Person back to Person and do other stuffs...
}
Haben Sie die Eigenschaft 'ModelState.Errors' überprüft? –
Ich sehe keine Errors-Eigenschaft für ModelState. – Austneal