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 回答