Asp.Net mvc, die Entsendung von json?
Mein iphone client sendet die folgende json zu meinem mvc-service.
Bei der Buchung von Daten aus html-Formular automatisch konvertiert Daten in das Formular zu UserModel und übergibt das Objekt an meine Create-Methode, aber wenn ich den JSON string in den Körper meiner Anfrage von einem iphone kommt es zurück, als null.
Was wäre die sauberste Lösung, um die Konvertierung von JSON-Objekt.
Ich eher nicht, erstellen Sie mehrere Methoden für die verschiedenen clients, so dass ich versuche die gleiche Methode funktioniert auf iphone und mvc-client.
Körper meiner Anfrage:
{
"firstName" : "Some Name",
"lastName" : "Some Last Name",
"age" : "age"
}
Mein Modell und das Ergebnis einer Aktion
public class UserModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
[HttpPost]
public Create ActionResult(UserModel user)
{
//user is null
userStorage.create(user);
return SuccessResultForModel(user);
}
nur um zu bestätigen, die Sie konvertieren möchten, das Benutzer-Objekt, das trifft den controller von json?
Registrieren Sie die JsonValueProviderFactory ist (was gebraucht wird für MVC zu decodieren des JSON post-data)? Ist der client geben Sie den richtigen ContentType? Siehe stackoverflow.com/questions/4789481/... für weitere Dinge zu überprüfen (top-Antwort gestimmt hat die Liste).
Das JSON sieht nicht gültig ist, gibt es ein Komma nach "Alter"? Auch der Wert für Alter sollte ein int? (Obwohl ich denke, dass gelingt das nicht, wird ein default-int-Wert von 0). Auch Ihre HttpPost-Methode sagt
Nein, ich habe nicht registriert, ich werde geben ti einen Versuch und post zurück, danke
Registrieren Sie die JsonValueProviderFactory ist (was gebraucht wird für MVC zu decodieren des JSON post-data)? Ist der client geben Sie den richtigen ContentType? Siehe stackoverflow.com/questions/4789481/... für weitere Dinge zu überprüfen (top-Antwort gestimmt hat die Liste).
Das JSON sieht nicht gültig ist, gibt es ein Komma nach "Alter"? Auch der Wert für Alter sollte ein int? (Obwohl ich denke, dass gelingt das nicht, wird ein default-int-Wert von 0). Auch Ihre HttpPost-Methode sagt
Create Actionresult
, sollte es nicht ActionResult Create
?Nein, ich habe nicht registriert, ich werde geben ti einen Versuch und post zurück, danke
InformationsquelleAutor aryaxt | 2013-03-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den HTTP-Header "accept" application/json", so dass MVC wissen, dass Sie als JSON übergeben und macht die Arbeit, Sie zu interpretieren.
sehen mehr info hier: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
UPDATE: Arbeiten Beispielcode mit MVC3-und jQuery -
- Controller-Code
Anzeigen-Code
Vielen Dank für all die Mühe
Aber die accept-header ist nur zu sagen, der server, was der client in der Lage ist zu empfangen. Wie beschrieben, in anderen Fragen ist es ausreichend, um die content-type-header:
contentType: "application/json; charset=utf-8"
,Diese Antwort scheint nicht richtig zu mir. Den code gegeben hat "Arbeit", aber wenn man sich an den eigentlichen body der Anfrage gesendet $.ajax() nicht das senden JSON, seine Verwendung application/x-www-form-urlencoded-format, die querystring-format grundsätzlich. Wenn Sie den jQuery-code, um tatsächlich zu senden, JSON, MVC-Aktion nicht mehr funktioniert, da der contentType ist nicht festgelegt. Siehe meine Antwort hier stackoverflow.com/a/52205206/22194 eine etwas andere version senden, JSON und funktioniert.
ich lese deine andere Antwort. wenn Sie möchten, legen Sie den contentType der zurückgegebenen Inhalte, ASP.NET (und mehr moderne Versionen, da dies post bieten diese Möglichkeit.
InformationsquelleAutor Glenn Ferrie
Versuchen, ändern Sie die Methode, um dies zu sehen, wenn Sie kommen, FirstName oder LastName
Ich glaube nicht, dass der poster hat das Privileg zum Kommentar
dies ist etwas, was ich nie zugestimmt, mit SO ca. Die Falle der Begrenzung der neuen Benutzer zu kommentieren und dann nach unten-voting Sie für es. Hier ist eine +1 in der Hoffnung, bald er wird um 15 und intelligente Kommentare. Jesse, ich hoffe, dass Sie nicht verlieren Ihren Antrieb, aber ein wenig mehr Forschung, bevor Sie selbst kommentieren.
Wenn Sie möchten, upvote unsinnige Antworten nur, um nett zu den Jungs, versuchen Sie nicht, es zu tun auf einer Frage, wo es verbindungen mit vernünftigen Antworten. Und upvoting, weil Sie nicht mit SO Politik ist einfach nur dumm, und nicht helfen, das poster verbessern. Einen Kommentar mit links zu Informationen, was stellt gute Fragen und Antworten ist viel wahrscheinlicher, um tatsächlich helfen, die person zu verbessern. Gute Absichten, falsche Methodik.
Danke Jungs für all Eure Kommentare 🙂 ich werde versuchen, etwas besser zu machen
InformationsquelleAutor Jesse Jin
Spät aber hoffe es hilft jemand.
Was wäre die sauberste Lösung, um die Konvertierung von JSON-Objekt?
Diese Weise erhalten Sie ein reines JSON-Objekt zu arbeiten mit der controller angefordert.
dies funktioniert tatsächlich und ich mag, dass können Sie sehen, wo die Decodierung geschieht, eher als es passiert durch Magie in das mvc-Modell von binder.
InformationsquelleAutor dbol
Ich kam vor kurzem mit einem viel einfacheren Weg, um post ein JSON -, mit den zusätzlichen Schritt der Umwandlung von einem Modell, in meiner app. Beachten Sie, dass Sie haben, um das Modell [JsonObject] für Ihre controller, um die Werte und die Konvertierung zu tun.
Anfrage:
Modell:
Server-Seite:
InformationsquelleAutor Dustin
Basiert auf Glenn Fähren Antwort, die schien zu funktionieren, bis ich sah, was war eigentlich an den controller gesendet - und es war nicht JSON.
Daher angepasst, ein bisschen unter:
Dies ist mit MVC 4, jQuery 1.7 ish
Controller-action-Methode (UserModel-Objekt als in-Frage):
jQuery-code, um die Anfrage zu senden:
Den MVC-controller-Aktion, ist der einfache Teil.
Die harte bit ist dafür, dass Sie tatsächlich senden, JSON, um es zu testen.
jQuery ajax () - Methode verwendet werden, wenn mit POST wird in der Regel Kodieren Parameter mit querystring-format in den Körper der Anfrage. MVC kann gerne entpacken, die.
Tatsächlich senden JSON mit ajax() müssen Sie JSON verwenden.stringify().
Und für MVC richtig zu interpretieren, dass die Anfrage, die Sie benötigen, um die contentType -
InformationsquelleAutor codeulike