Pourquoi servicestack n'a-t-il pas pu créer une liaison de modèle sur la demande de publication JSON ?
-
12-12-2019 - |
Question
$.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 !
});
J'ai tracé le flux via Firebug.Firebug a reconnu et affiché l'objet JSON.
Ce code a accédé à la méthode OnPost de RestServiceBase. Mais la liaison de modèle n'a pas fonctionné.Les noms de propriétés doivent-ils être exactement les mêmes sur l’objet Json et la classe C# ?
Ou est-ce que j'ai raté quelque chose ?(Oui, il te manque quelque chose !)
PS : j'ai changé l'URL en "/api/student/json/asynconeway", j'espère, mais j'ai ensuite eu une erreur 404.
La solution 3
Je dois ajouter
DataType: «Application / JSON» Propriété à la demande Ajax!
Autres conseils
ServiceStack est Modèle lier un message JSON (ainsi que l'un des Types de contenu pris en charge, y compris x-www-form-urlencoded).
Il existe de nombreux exemples dans servicestack.examples qui fait cela.
Ce code a accédé à la méthode d'ONPost de WestServiceBase .Mais de modèle de modèle n'a pas fonctionné.
Vous n'avez pas montré ce que vous essayez de vous lier. Mais ce json
{"x":3,"y":2}
mapperait dans une DTO correspondante, E.g:
public class Student { public int X { get; set; } public int Y { get; set; } }
Les noms de propriété doivent-ils être exactement les mêmes sur l'objet JSON et la classe C #?
Ils doivent correspondre aux noms de bien sûr, mais
ne sont pas sensibles à la casse , voir ci-dessus. PS: J'ai changé d'URL à "/ API / Student / JSON / ASYNCONEWAY", espérons-le, mais Ensuite, j'ai eu 404 erreur
C'est faux. Si vous essayez d'utiliser un itinéraire prédéfini automatique , l'URL correcte est :
/api/json/asynconeway/student
En supposant que votre
DTO est appelé Student
.
Voici un de mes codes :
$.ajax({
type: "POST",
url: "/artist/delete",
data: { id: itemId },
success: function () {
$("div#" + itemId).fadeOut(function () { $(this).remove(); });
}
});
MODIFIER: Désolé, je me suis trompé sur ce que vous vouliez là, alors je vais vous poser une question, pourquoi envoyez-vous json au serveur où vous pourriez créer une fonction comme celle-ci :
[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 : et vous avez une erreur de syntaxe ici data:'{"x":3,"y":2)}',
.
EDIT3 : Une autre erreur de syntaxe
}
}
});
A la fin du code.