Mongodb HttpClient使用RestHeart删除

Mongodb HttpClient使用RestHeart删除,mongodb,httpclient,restheart,Mongodb,Httpclient,Restheart,我在使用RestHeart时遇到问题。我想删除MongoDB服务器中的一个特定文档,我确认下面的命令在命令提示符下可以正常工作 http delete localhost:8080/mytest/users/56dda76daeb32b0860d909e1 if-match:56dda76daeb32b0860d909e2 文档被正确删除,然后我在同一个集合中创建了一个文档,我编写了一些C#代码来删除新创建的文档 public async void TryDeleteAsync() {

我在使用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预定位失败消息。这个代码有什么问题


谢谢。

错误412-前置条件失败,表示ETag不匹配。查看此代码行:

client.DefaultRequestHeaders.IfMatch.Add(new EntityTagHeaderValue("\"56dda76daeb32b0860d909e5\""));
我注意到传递给EntityTagHeaderValue构造函数的ETag值中的转义引号。尝试:

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

错误412-前置条件失败,表示ETag不匹配。查看此代码行:

client.DefaultRequestHeaders.IfMatch.Add(new EntityTagHeaderValue("\"56dda76daeb32b0860d909e5\""));
我注意到传递给EntityTagHeaderValue构造函数的ETag值中的转义引号。尝试:

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

谢谢Andrea,我发现了一个相关的问题:IfMatch.Add()方法需要EntityTagHeaderValue,但如果字符串不包含引号,它会调用格式异常。HttpRequestMessage.Headers.TryAddWithoutValidation(“If Match”,“etag”)似乎有效,但我不确定这种方式是否正确。谢谢Andrea,我发现了一个相关问题:IfMatch.Add()方法需要EntityTagHeaderValue,但如果字符串不包含引号,它会调用格式异常。似乎HttpRequestMessage.Headers.TryAddWithoutValidation(“If Match”、“etag”)可以工作,但我不确定这种方法是否正确。