1

RestHeart の使用に問題があります。MongoDB サーバーで特定のドキュメントを削除したいのですが、コマンド プロンプトで以下のコマンドが正常に動作することを確認しました。

http delete localhost:8080/mytest/users/56dda76daeb32b0860d909e1 if-match:56dda76daeb32b0860d909e2

ドキュメントが正しく削除された後、同じコレクションにドキュメントを作成し、新しく作成されたドキュメントを削除する C# コードをいくつか書きました。

public async void TryDeleteAsync() {
        using(var client = new HttpClient()) {
            client.BaseAddress = new Uri("http://127.0.0.1:8080/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                
            client.DefaultRequestHeaders.IfMatch.Clear();
            client.DefaultRequestHeaders.IfMatch.Add(new EntityTagHeaderValue("\"56dda76daeb32b0860d909e5\""));

            HttpResponseMessage response = await client.DeleteAsync("/mytest/users/56dda76daeb32b0860d909e4");
            if(response.IsSuccessStatusCode) {
                var result = await response.Content.ReadAsStringAsync();
                Console.WriteLine(result);
            }
        }
    }

ドキュメントと ETag ID は正しいのですが、応答 412 precondtion failed メッセージを受け取りました。このコードのどこが間違っていますか?

ありがとう。

4

1 に答える 1

0

エラー 412 - 前提条件が失敗しました。ETag が一致しないことを意味します。このコード行を見ると:

client.DefaultRequestHeaders.IfMatch.Add(new EntityTagHeaderValue("\"56dda76daeb32b0860d909e5\""));

EntityTagHeaderValue コンストラクターに渡される ETag 値で引用符がエスケープされていることに気付きました。試してみてください:

client.DefaultRequestHeaders.IfMatch.Add(new EntityTagHeaderValue("56dda76daeb32b0860d909e5"));
于 2016-03-08T07:53:03.100 に答える