Wie verwenden von Delta - <T> von Microsoft ASP.NET Web-API OData mit Code First\JsonMediaTypeFormatter
Was ist das Problem?
Ich versuche, aktivieren, patchen in meinem ASP.net web-api-app. Ich bin mit entity framework code first.
Habe ich die folgende Methode header kann ich einen breakpoint setzen, und Sie wird getroffen:
[AcceptVerbs("PATCH")]
public async Task<HttpResponseMessage> Patch(long appId, long id, Delta<SimpleFormGroup> formGroup)
Jedoch wenn ich anrufen formGroup.Patch(entity), werden keine änderungen vorgenommen zu meiner Person. Wenn ich Folgendes in das Direktfenster:
formGroup.GetChangedPropertyNames()
Dann diese Sammlung ist leer, was falsch scheint.
Was habe ich versucht?
Ich habe unter Bezugnahme auf die folgenden Beispiele
http://techbrij.com/http-patch-request-asp-net-webapi
http://www.strathweb.com/2013/01/easy-asp-net-web-api-resource-updates-with-delta/
Scheint es ein problem mit dem Json-MediaType-Formatter nicht wissen, wie man die Delta-Objekt richtig, aber im 2. link, filip scheint zu suggerieren, dass es funktionieren sollte ohne die oDataMediaTypeFormatter.
Habe ich begonnen, auf der ganzen Linie zu versuchen, serialise mein Modell zu EDMX-Vertretung, um dann von dort aus extrahieren der CSDL -, so kann ich erstellen Sie eine oDataMediaTypeFormatter, aber ich habe getroffen einen Haken gibt es auch, plus es scheint ein bisschen übertrieben.
Wenn jemand könnte alle vergossen Licht auf diesen, es würde sehr geschätzt. Lassen Sie mich wissen, wenn noch mehr Informationen benötigt werden.
EDIT:
Hier ist die Klassendefinition für SimpleFormGroup:
public class SimpleFormGroup
{
public int LastUpdate;
public string Identifier;
public string Title;
public int DisplayOrder;
}
Und hier sind die Daten die ich sende:
Content-Type: 'application/json'
{ "DisplayOrder" : "20 }
Dank, Pete
Siehe oben... ich habe tatsächlich festgestellt, dass eine Abhilfe für dieses für den moment, aber ich wäre daran interessiert, Ihre Gedanken zu hören
Das ist kein gültiges JSON, wenn man bedenkt das Zitat auf der linken Seite der 20. Gibt es eine Schließung zitieren, um den Wert oder nicht öffnen-Angebot?
Ich Frage mich, was hat sich verändert zwischen webapi 1 und webapi 2. Delta verwendet, um die Arbeit mit JSON.NET ganz Prima WebAPI 1 mit Filip Delta-code
InformationsquelleAutor beyond-code | 2013-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Interessant, es sieht aus wie
Delta<T>
mit int Mitglieder nicht in JSON.Leider
Delta<T>
wurde speziell für OData. WennDelta<T>
scheint zu funktionieren mit jedem formatter andere als OData, es ist eher ein Zufall als gewollt.Die gute Nachricht ist aber, dass es nichts zu stoppen Sie aus definieren Sie Ihre eigenen PATCH-format für JSON, und ich würde überrascht sein, wenn niemand schon geschrieben hat, der funktioniert besser mit Json.NET. Es ist möglich, dass wir überdenken, patching in einer zukünftigen Version des Web-API und versuchen Sie, eine konsequente Geschichte, die funktioniert über Formatierer.
Dies ist ein guter Ort, um zu starten: aspnetwebstack.codeplex.com/workitem/777.
Ich bemerkte es drosseln auf int und Guid für JSON. Ich habe eine workaround hier strathweb.com/2013/01/.... In kurzen, JSON.NET behandeln würde den int-Datentyp als long-und Guid als string, also die Delta - <T> muss der code Schild gegen, die,
Ich wünschte, Sie würde aufhören, lolly Würgen um auf aspnetwebstack.codeplex.com/workitem/777 .. Das wäre so nützlich für mvc / web api im Allgemeinen.
Hat jemand bekommen, diese mit zu arbeiten json.net und webapi2? Ich habe filipw der Delta-code in ein WebAPI-1-Projekt und arbeitete mit json.net 4.5.11
InformationsquelleAutor Youssef Moussaoui
Danke an Youssef für das erforschen und entdecken, warum es nicht funktioniert. Hoffentlich kann gelöst werden die Linie nach unten.
Habe ich es geschafft zu knacken, das mich am Ende nach poring über die oData-Paket-Quelle. Beschloß ich, ein weiteres MediaTypeFormatter, hüllt sich die Logik, wie es bietet einfachen Zugang tio HttpContent, aber es gibt andere Wege, dies zu erreichen.
Der wichtigste Teil war, herauszufinden, wie Sie interpretieren den code-first-Modell, siehe die auskommentierte Zeile unten:
Hoffe, das spart jemand einige Mühe!
InformationsquelleAutor beyond-code