2 Stimmen

Warum servicestack konnte nicht machen Modell Bindung auf Json Post-Anfrage?

$.ajax({
        type: 'POST',
        url: "/api/student",  
        data:'{"x":3,"y":2}',
        dataType: "json",
        complete: function (r, s) {
            debugger;
        },

        success: function(response){
            debugger;
        },

        contentType: "application/json" // !!!!!!!!!!!! The reason of problem. I could see Json on firebug. It was false-positive for my code !

    });

Ich habe den Stream über Firebug verfolgt. Firebug erkannt und zeigte JSON-Objekt.

Dieser Code griff auf die OnPost-Methode von RestServiceBase zu, aber die Modellbindung funktionierte nicht. Haben Eigenschaft Namen müssen genau das gleiche auf Json Objekt und C#-Klasse sein?

Oder übersehe ich etwas? (Ja, Sie übersehen etwas!)

PS: Ich habe url zu "/api/student/json/asynconeway" geändert hoffentlich, aber dann bekam ich 404 Fehler

4voto

mythz Punkte 138304

ServiceStack tut Modell einen JSON POST binden (sowie jeden der unterstützten Content-Typen einschließlich x-www-form-urlencoded).

Es gibt viele Beispiele in ServiceStack.Beispiele das dies tut.

Dieser Code greift auf die OnPost-Methode von RestServiceBase zu, aber die Modellbindung hat nicht funktioniert.

Sie haben nicht gezeigt, was die DTO Sie versuchen, zu binden. Aber dieses JSON

{"x":3,"y":2}

würde auf ein passendes DTO abgebildet, z. B:

public class Student { 
    public int X { get; set; }
    public int Y { get; set; }
}

Haben Eigenschaft Namen müssen genau gleich auf Json Objekt und C#-Klasse sein?

Sie müssen natürlich mit den Namen übereinstimmen, aber nicht zwischen Groß- und Kleinschreibung unterscheiden , siehe oben.

PS: Ich habe die Url auf "/api/student/json/asynconeway" geändert, aber hoffentlich dann bekam ich 404 Fehler

Das ist falsch. Wenn Sie versuchen, eine automatische vordefinierte Route lautet die korrekte URL:

/api/json/asynconeway/student

Angenommen, Ihr DTO anfordern heißt Student .

0voto

skmasq Punkte 4412

Hier etwas Code von mir:

            $.ajax({
                type: "POST",
                url: "/artist/delete",
                data: { id: itemId },
                success: function () {
                    $("div#" + itemId).fadeOut(function () { $(this).remove(); });
                }
            });

EDIT : Tut mir leid, ich falsch, was Sie dort wollten, so werde ich Ihnen eine Frage stellen, warum sind Sie json an Server senden, wo Sie eine Funktion wie diese machen könnte:

[HttpPost]
        public ActionResult Delete(int id)
        {
            var artist = _db.Artists.Where(x => x.ID == id).SingleOrDefault();
            if (artist == null)
            {
                return Content("false");
            }
            else
            {
                _db.Artists.DeleteOnSubmit(artist);
                _db.SubmitChanges();
                return RedirectToAction("Post");
            }
        }

EDIT2: und Sie haben hier einen Syntaxfehler data:'{"x":3,"y":2)}', .
EDIT3: Ein weiterer Syntaxfehler

        }
        }
    });

Am Ende des Codes.

0voto

Oguz Karadenizli Punkte 3399

Ich muss hinzufügen

dataType: "application/json" Eigenschaft für Ajax-Anfrage!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X