2016-03-07 53 views
1

我在使用RestHeart時遇到問題。我想刪除MongoDB服務器中的特定文檔,並確認以下命令在命令提示符下正常工作。HttpClient使用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); 
      } 
     } 
    } 

Document和ETag ID是正確的,但我得到了響應412 precondtion失敗的消息。這段代碼有什麼問題?

謝謝。

回答

0

錯誤412 - 先決條件失敗,表示ETag不匹配。望着這行代碼:

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

我注意到傳遞給EntityTagHeaderValue構造的ETag值的轉義引號。試着用:

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

感謝安德烈,我發現了一個相關的問題:http://stackoverflow.com/a/17344681/6030429 IfMatch.Add()方法需要EntityTagHeaderValue但如果一個字符串做它調用格式異常不包括引號。看起來HttpRequestMessage.Headers.TryAddWithoutValidation(「If-Match」,「etag」)有效,但我不確定這種方式是否正確。 –