Mon scénario: J'utilise MonoTouch pour iOS pour créer une application iPhone. J'appelle les services HTTP ASP.NEt MVC 4 Web API pour me connecter/me déconnecter. Pour la connexion, j'utilise le webmethod POST et tout va bien. Pour la déconnexion, j'appelle la méthode Web Delete. Je souhaite transmettre des données JSON (données complexes sérialisées) à l'appel Delete. Si je transmets des données simples comme un paramètre de chaîne unique dans le cadre de l'URL elle-même, alors tout est bien, c'est-à-dire que Delete fonctionne! Afin de passer le Json complexe de données, voici mon appel (j'ai ajusté le code pour le rendre simple en montrant un seul paramètre - UserName envoyé via JSON):MonoTouch/iPhone - Appel à HttpWebRequest.GetRequestStream() se connecte au serveur lorsque la méthode HTTP est SUPPRIMER
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://localhost/module/api/session/");
req.ContentType = "application/json";
req.CookieContainer = jar;
req.Method = "Delete";
using (var streamWrite = new StreamWriter(req.GetRequestStream()))
{
string jSON = "{\"UserName\":\"" + "someone" + "\"}";
streamWrite.Write(jSON);
streamWrite.Close();
}
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
sur le serveur, la méthode Delete semble a cette définition:
public void Delete(Credentials user)
où Credentials est un type complexe.
Maintenant, voici le problème!
Le code ci-dessus, pénètre dans la méthode Delete sur le serveur dès qu'il frappe:
req.GetRequestStream()
Et par conséquent, le paramètre envoyé à la méthode Delete finit par être nul
Et voici la partie bizarre: Si j'utilise exactement le même code en utilisant une application de test VS 2010 windows, même le code ci-dessus fonctionne ... c'est-à-dire qu'il n'appelle pas Delete jusqu'à ce que req.GetResponse() soit appelé! Et dans ce scénario, le paramètre de la méthode Delete est un objet valide!
QUESTION
Toutes les idées ou est-ce un bug avec MonoTouch, le cas échéant, une solution de contournement?
REMARQUE:
si je change la définition Supprimer pour public void Supprimer (string userName) et au lieu de JSON, si je passe le paramètre dans le cadre de l'URL elle-même, tout est bien. Mais comme je l'ai dit, ce n'est qu'un exemple simplifié pour illustrer mon problème. Toute aide est appréciée !!!
Salut poupou, Merci pour votre réponse. J'ai passé en revue le lien - alors que les premiers commentaires suggèrent que le corps est ignoré, il y a un commentaire plus récent qui dit que c'est autorisé. Quoi qu'il en soit, comme je l'ai mentionné dans mon message d'origine, le même code fonctionne dans une application Windows Forms Visual Studio 2010, c'est-à-dire qu'il n'ignore pas les données json supplémentaires envoyées. On dirait que je devrais déposer un rapport sur bugzilla. Faites-moi savoir si vous pensez autrement sinon je le ferai. –
Terminé. Déposé un rapport sur bugzilla. Merci poupou !!! –
@AMSIDev Pourriez-vous poster l'URL du rapport bugzilla? Merci beaucoup! –