2

これらのパラメーターを使用して、リクエスト本文を含む DELETE リクエストを送信します。 ここに画像の説明を入力

サーバーはステータス 500 で応答します。

curl -D- -X DELETE -d "{\"pin\":\"1111\"}" -H "Content-Type:application/json" -H "Authorization:Basic sameasinimagabove" https://myrestapiendpoint/resource/id

そしてそれは動作します。RestSharp.WindowsPhone v. 104.3.3.0 の最新バージョンを使用しています。
何が間違っている可能性がありますか?リクエストを作成して送信するためのコード:

    RestRequest PrepareRequest(Method method, string url, IDictionary<string, object> data)
    {
        var request = new RestRequest(url, method);
        request.AddHeader("Authorization", "Basic " + "yadyadyadyada");
        request.AddHeader("X-Originator-Type", "app");
        request.AddHeader("X-Os-Type", Environment.OSVersion.Platform.ToString());
        request.AddHeader("X-Os-Version", Environment.OSVersion.Version.ToString());
        request.AddHeader("X-Device-Id", AppUtil.DeviceId);
        request.AddHeader("X-Client-Version", AppUtil.ApplicationVersion);
        request.AddHeader("Locale", System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName);
        request.AddHeader("If-Modified-Since", DateTime.UtcNow.ToString("u"));
        if (data != null || method == Method.PUT || method == Method.POST || method == Method.DELETE)
        {
            request.RequestFormat = DataFormat.Json;
            if (data == null)
                data = new Dictionary<string, object>();
            string json = JsonParser.Serialize(data);
            request.AddParameter("application/json", json, ParameterType.RequestBody);
        }
    }

    _restClient.ExecuteAsync(request, response =>
                     {
                         _activeRequests.Remove(handle);
                         done(responseHandler(AddRequestToResponse(request, response)));
                     });
4

2 に答える 2

0

RestSharp のバグを発見した可能性があります。

Windows 7 マシンでコード (少し簡略化) を実行してみましたが、動作するようです。

var restClient = new RestClient("http://api.example.com");
var restRequest = new RestRequest("myResource", Method.DELETE);

restRequest.AddHeader("Authorization", "Basic " + "yadyadyadyada");
restRequest.AddHeader("X-Originator-Type", "app");
restRequest.AddHeader("X-Os-Type", Environment.OSVersion.Platform.ToString());
restRequest.AddHeader("X-Os-Version", Environment.OSVersion.Version.ToString());
restRequest.AddHeader("X-Device-Id", "myDeviceID");
restRequest.AddHeader("X-Client-Version", "1.2.3");
restRequest.AddHeader("Locale", System.Globalization.CultureInfo.CurrentCulture.TwoLetterISOLanguageName);
restRequest.AddHeader("If-Modified-Since", DateTime.UtcNow.ToString("u"));

var data = new Dictionary<string, object> { { "key1", "value1" }, { "key2", "value2" }, };
var json = JsonConvert.SerializeObject(data);

restRequest.RequestFormat = DataFormat.Json;
restRequest.AddParameter("application/json", json, ParameterType.RequestBody);

restClient.Execute(restRequest);

実行すると、Fiddler は要求に本文があることを示します。

Fiddler のスクリーン キャプチャ

これは、通常の Windows マシンで正しく動作するようです。残念ながら、テストする Windows Phone がありません。通常の Windows マシンと Windows Phone でコードを試して、異なる結果が得られるかどうかを確認することをお勧めします。

于 2013-11-06T22:17:26.377 に答える