Pas de MediaTypeFormatter est disponible à la lecture d'un objet de type 'InventoryItem'
Appel AJAX
$.ajax({
url: '/api/Inventory',
cache: false,
type: 'POST',
data: json,
contentType: 'application/json, charset=utf-8',
statusCode: {
201: function (data) {
console.log(data);
viewModel.items.push(data);
}
}
});
Données Envoyées (json
) /Demande De Charge Utile
{"Id":0,"Upc":"3456789012","Quantity":"200","Category":"Vodka","TransactionType":"Audit","MetaData":"ABSOLUT 750ml"}
Erreur De Réponse
Pas MediaTypeFormatter est disponible à la lecture d'un objet de type
'InventoryItem' à partir du contenu avec les médias de type "undefined"."
Acheminé méthode POST
public HttpResponseMessage PostItem(InventoryItem item)
Toutes les propriétés de la chaîne JSON sont présents dans le InventoryItem
modèle.
Un question similaire concernant les types complexes suggéré la mise à niveau de version Beta et la version RC de fixer un modèle de liaison de changement, qui je l'ai fait.
Si la question n'est pas évidente, comment puis-je rectifier cette erreur? Si j'ajoute l' [FromUri] attribut à la Routé méthode POST, puis de l'appel AJAX est acheminé correctement, mais avec un vide InventoryItem
. Si vous avez besoin d'autres informations, s'il vous plaît laissez-moi savoir.
OriginalL'auteur Josh | 2012-06-24
Vous devez vous connecter pour publier un commentaire.
devrait être:
Avis l'utilisation de
;
au lieu de,
qui est le bon séparateur entre le type de contenu et le jeu de caractères. Aussi, si vous suivez standard Reposant conventions de votre contrôleur de l'action doit être appeléPost
et pasPostItem
comme vous l'avez montré:POST
action a étéPostProduct
. Toutefois, le point-virgule fait le fixer! Je vous remercie beaucoup.Ce n'est pas à la convention standard utilisé par ASP.NET MVC 4 RC itinéraires lorsque vous créez un nouveau projet. Ils utilisent
api/{controller}/{id}
. Comme vous pouvez le voir le nom de l'action ne fait pas partie de l'url, ce qui signifie que la bonne action est choisie de base sur le verbe HTTP utilisé pour effectuer la demande. Mais de toute façon, ce n'est pas lié à votre problème. Votre problème vient de passer une valeur incorrecte pour le Type de Contenu d'en-tête HTTP.Donc, vous devriez généralement pas ajouter quoi que ce soit au nom de l'action autre que leur type de demande? Comme
Post
ouDelete
par opposition àPostItem
ouDeleteItem
?précisément. Le verbe HTTP dicte l'action qui sera appelé sur une bonne contrôleur.
Aussi, puisque c'était juste un point-virgule problème, je comprends cette question est peut-être trop localisée à réellement aider quelqu'un. Je vais accepter votre réponse, mais je comprends, si elle est signalée pour être supprimé.
OriginalL'auteur Darin Dimitrov