私のシナリオ: Monotouch for iOS を使用して iPhone アプリを作成しています。ASP.NET MVC 4 Web API ベースの http サービスを呼び出してログイン/ログオフしています。ログインには、POST webmethod を使用しますが、すべて問題ありません。ログオフについては、Delete Web メソッドを呼び出しています。JSON データ (シリアル化された複雑なデータ) を Delete 呼び出しに渡したいと考えています。URL自体の一部として単一の文字列パラメータのような単純なデータを渡すと、すべてうまくいきます。つまり、削除は機能します! 複雑な Json データを渡すために、ここに私の呼び出しがあります (JSON 経由で送信される UserName というパラメーターを 1 つだけ表示することで、コードを単純化するように調整しました):
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();
サーバーでは、Delete メソッドは次のように定義されているように見えます。
public void Delete(Credentials user)
Credentials は複合型です。
では、本題です!
上記のコードは、ヒットするとすぐにサーバー上の Delete メソッドに入ります。
req.GetRequestStream()
したがって、Delete メソッドに送信されるパラメーターは null になります。
そして、ここに奇妙な部分があります:テストVS 2010 Windowsアプリケーションを使用してまったく同じコードを使用すると、上記のコードでも機能します...つまり、req.GetResponse()が呼び出されるまでDeleteを呼び出しません! このシナリオでは、Delete メソッドのパラメーターは有効なオブジェクトです。
質問
任意のアイデアまたはこれは Monotouch のバグですか? もしそうなら、回避策はありますか?
ノート:
Delete 定義を public void Delete(string userName) に変更し、json の代わりに、パラメーターを URL 自体の一部として渡すと、すべてうまくいきます。しかし、私が言ったように、これは私の問題を説明するための単純化された例です。どんな助けでも大歓迎です!!!