Paramètres POST dans CURL
Je suis d'essayer d'utiliser CURL pour envoyer un simple POSTE de paramètre (un int) pour un ASP.NET web api contrôleur méthode POST comme ceci:
curl -d "id=1" --ntlm --user <user>:<pass> http://dev.test.local/api/test
Est-ce la bonne façon d'attacher des données à la POSTE pour Curl? Je peux communiquer avec l'URL bien, mais il semble que le paramètre 'id' n'obtient pas passé car j'obtiens l'erreur suivante retourné par le serveur:
"The parameters dictionary contains a null entry for parameter 'id' of non-nulla
ble type 'System.Int32' for method 'System.String Post(Int32)' in 'Test.Si
te.Controllers.TestController'. An optional parameter must be a reference type,
a nullable type, or be declared as an optional parameter."
Ma méthode POST dans la OrderController est comme suit:
//POST api/test
public string Post(int id)
{
return "Post successful";
}
Toute aide est très appréciée.
- Si vous êtes curieux de savoir exactement ce que
curl
est de l'envoi, vous pouvez exécutercurl --trace-ascii curl.log -d id=1 ...
et puis regardez danscurl.log
(qui vous montrera quecurl
est la génération d'un tout à fait normalPOST
demande) - Ok, j'ai eu un coup d'oeil à la et le journal d'erreur est le même que celui figurant ci-dessus?
- est-il possible que les données envoyées par le roulage est interprété comme une chaîne de caractères, et non pas comme un entier, et, par conséquent, est entaché de nullité en quelque sorte par .net? Pensez à changer votre fonction à accepter une Chaîne à la place et laissez-nous savoir si cela aide.
Vous devez vous connecter pour publier un commentaire.
Personnellement, je voudrais utiliser une simple DTO et appel via JSON.
route:
contrôleur & DTO:
Appel avec curl:
Mais
Qu'à le suivre sur un peu de tugberk la réponse de référence à un autre réponse et ici .
Lorsque vous utilisez le FromBody attribut vous devrez également envoyer le "Content-Type" en tant que Content-Type: application/x-www-form-urlencoded. Vous aurez aussi besoin de changer l'appel de ne pas avoir la "id=1" et au lieu d'utiliser "=1" par exemple
Le problème est que les types simples comme les
int
,string
, etc. ne peut pas être le modèle lié avec les données dans le corps du message, à moins que vous le dire explicitement, comme ci-dessous:L'autre solution est que vous pouvez demander à ces types de valeurs de
RouteData
ou une chaîne de requête.