4

私のシナリオ: 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 自体の一部として渡すと、すべてうまくいきます。しかし、私が言ったように、これは私の問題を説明するための単純化された例です。どんな助けでも大歓迎です!!!

4

1 に答える 1

2

これは明確に定義されていないようです。詳細については、この質問を参照してください。エンティティ本体はHTTP DELETE要求に許可されていますか?

一般に、MonoTouch(Monoに基づく)は、プラットフォーム間のコードの移植性を容易にするために、Microsoft.NETフレームワークと機能/バグ互換性を持たせようとします。

IOW MS.NETがDELETEメソッドの本体を無視する場合、MonoTouchも無視します。動作が異なる場合は、http://bugzilla.xamarin.comでバグレポートに記入する必要があります

于 2012-08-03T13:31:48.197 に答える