Pourquoi servicestack n'a-t-il pas pu créer une liaison de modèle sur la demande de publication JSON ?

StackOverflow https://stackoverflow.com//questions/11678610

  •  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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top