2016-08-16 11 views
5

का उपयोग कर रहा एक परिदृश्य में जहाँ मैं फोन करने के लिए अपने वेब एपीआई हटाएँ तरह का निर्माण पद्धति का अनुसरण की जरूरत है विधि बुला शरीर सामग्री पासिंग क्वेरी प्राप्त करने के लिए मुझे इसे शरीर के माध्यम से भेजने की आवश्यकता है और DeleteAsync में पोस्ट की तरह जेसन के लिए एक param नहीं है। क्या किसी को पता है कि मैं C# में System.Net.Http क्लाइंट का उपयोग करके यह कैसे कर सकता हूं?जब एक हटाएं वेब एपीआई System.Net.Http

// Delete a product's headers 
public void DeleteProductHeaders(int id, string query) 
{ 
    using (var client = GetClient()) 
    { 
     HttpResponseMessage response; 
     try 
     { 
      // HTTP DELETE 
      response = client.DeleteAsync($"api/products/{id}/headers").Result; 
     } 
     catch (Exception ex) 
     { 
      throw new Exception("Unable to connect to the server", ex); 
     } 
    } 
    return retVal; 
} 
+1

आप बनाने की कोशिश कर सकते है एक 'HttpRequestMessage' हटाएँ विधि और के साथ मैन्युअल रूप से' HttpContent' तो का उपयोग 'HttpClient.SendAsync' – Nkosi

उत्तर

2

मुझे लगता है कि कारण HttpClient कि जिस तरह से बनाया गया है अनिवार्य रूप से यह के रूप में यह है ऐसा करने के लिए के रूप में कल्पना इसके लिए किसी भी अर्थ विज्ञान को परिभाषित नहीं करता की उम्मीद नहीं है, हालांकि HTTP 1.1 कल्पना DELETE अनुरोध पर संदेश के मुख्य भाग की अनुमति देता है, परिभाषित here। HttpClient सख्ती से HTTP spec का पालन करता है इस प्रकार आप देखते हैं कि यह आपको अनुरोध में संदेश निकाय जोड़ने की अनुमति नहीं देता है।

तो, मैं ग्राहक की ओर से अपने विकल्प HttpRequestMessage here में वर्णित का उपयोग किया जाना है। आप बैकएंड से इसे ठीक करने और यदि आपके संदेश के मुख्य भाग क्वेरी में अच्छी तरह से काम करेगा पैरामीटर आप संदेश के मुख्य भाग में क्वेरी भेजने की है कि बजाय कोशिश कर सकते हैं।

मैं व्यक्तिगत रूप से लगता है DELETE संदेश शरीर के लिए अनुमति दी जानी चाहिए और एक सर्वर में नजरअंदाज नहीं किया जाना चाहिए के रूप में वहाँ निश्चित रूप से कर रहे हैं कि एक आप यहाँ उल्लेख की तरह के लिए मामलों का उपयोग करें।

अधिक उत्पादक चर्चा के लिए किसी भी मामले में इस पर कृपया this पर एक नजर है।

2

यहाँ मैं कैसे पूरा किया यह

var request = new HttpRequestMessage(HttpMethod.Delete, "http://www.example.com/"); 
request.Content = new StringContent(JsonConvert.SerializeObject(object), Encoding.UTF8, "application/json"); 
await this.client.SendAsync(request); 
संबंधित मुद्दे