2016-03-07 7 views
1

У меня проблема с использованием RestHeart. Я хочу удалить определенный документ на сервере MongoDB, и я подтвердил, что приведенная ниже команда отлично работает в командной строке.HttpClient delete with RestHeart

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 верны, но я получил ответ 412 precondtion failed message. Что не так в этом коде?

Спасибо.

ответ

0

Ошибка 412 - Условие не выполнено, означает, что ETag не соответствует. Глядя на эту строку кода:

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

Я заметил, сбежавших кавычки в значение ETag передается конструктору EntityTagHeaderValue. Попробуйте с:

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

Спасибо Андреа, и я нашел связанные с этим вопросы: http://stackoverflow.com/a/17344681/6030429 IfMatch.Add() метод требует EntityTagHeaderValue, но он вызывает исключение формат, если строка делает не включают кавычки. Кажется, что HttpRequestMessage.Headers.TryAddWithoutValidation («If-Match», «etag») работает, но я не уверен, правильно ли этот путь. –