web-dev-qa-db-fra.com

FromBody ne lie pas le paramètre de chaîne

J'ai un problème similaire à ASP.NET MVC 4 RC Web API Parameter Binding Issue , mais j'essaie de le résoudre en utilisant l'attribut [FromBody].

Fiddler signale la demande suivante (à l'exclusion des bits non pertinents comme la chaîne d'agent utilisateur)

PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1
Host: localhost:82
Connection: keep-alive
Content-Length: 11
Origin: http://localhost:3000
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*; q=0.01

query=Apple

L'action de mon contrôleur est

[HttpPut]
public ShoppingListItemWebModel CreateShoppingListItem([FromBody]string query) {
    // query is null
}

Je pourrais envelopper le paramètre dans un type complexe, mais cela semble être un hack pour résoudre le problème. Ou je pourrais mettre la requête dans l'URI, mais cela ne correspond pas au modèle du reste de l'API. Est-il possible de procéder de cette façon? Si oui, où est mon erreur?

42
Jordan Crittenden

changer votre demande pour être

PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1
Host: localhost:82
Connection: keep-alive
Content-Length: 11
Origin: http://localhost:3000
Content-Type: application/x-www-form-urlencoded
Accept: application/json, text/javascript, */*; q=0.01

=Apple

remarquer l'absence de "requête"

45
Filip W

Si vous utilisez AngularJS au lieu de jQuery, vous souhaiterez peut-être opter pour l'alternative suivante, car AngularJS utilise le type de contenu application/json par défaut.

PUT http://localhost:82/api/account/shoppinglistitems HTTP/1.1
Host: localhost:82
Connection: keep-alive
Content-Length: 7
Origin: http://localhost:3000
Content-Type: application/json
Accept: application/json, text/javascript, */*; q=0.01

'Apple'

Notez que la valeur est entourée de guillemets (simples ou doubles).

23
tsemer