2016-02-11 4 views
13

हो रहा है मैं HttpClient का उपयोग कर वेब एपीआई में पोस्ट करने का प्रयास कर रहा हूं। जब मैं वेब एपीआई की सेव विधि में ब्रेकपॉइंट डालता हूं तो [FromBody] उत्पाद शून्य है। इसका मतलब यह है कि जिस तरह से मैं वेब एपीआई पर उत्पाद पोस्ट कर रहा हूं, उससे कुछ गलत है। क्या कोई नीचे दिए गए कोड को देख सकता है और देख सकता है कि मैं कहां गलत हो रहा हूं। मुझे लगता है कि यह हेडर और सामग्री प्रकारों के साथ कुछ करना है।एचटीपी क्लाइंट और वेब एपीआई विधि का उपयोग कर एक वेब एपीआई में पोस्ट करना [FromBody] पैरामीटर शून्य

वेब एपीआई के लिए एक ग्राहक रिपोजिटरी से पोस्ट कॉल जो उत्पाद पास करना चाहिए JSON के रूप में के माध्यम से आपत्ति:

public async Task<Product> SaveProduct(Product product) 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:99999/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     StringContent content = new StringContent(JsonConvert.SerializeObject(product)); 
     // HTTP POST 
     HttpResponseMessage response = await client.PostAsync("api/products/save", content); 
     if (response.IsSuccessStatusCode) 
     { 
      string data = await response.Content.ReadAsStringAsync(); 
      product = JsonConvert.DeserializeObject<Product>(data); 
     } 
    } 
    return product; 
} 

वेब एपीआई नियंत्रक विधि:

[HttpPost] 
[Route("save")] 
public IActionResult Save([FromBody]Product product) 
{ 
    if (customer == null) 
    { 
     return HttpBadRequest(); 
    } 
    _manager.SaveCustomer(product); 
    return CreatedAtRoute("Get", new { controller = "Product", id = product.Id }, product); 
} 

[FromBody] उत्पाद उत्पाद पैरामीटर शून्य होने के समाप्त होता है।

+0

मैं एक बयान का उपयोग करके देख https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/ में HttpClient लपेटकर नहीं की सिफारिश करेंगे – Xander

उत्तर

22

क्या आपने फिडलर जैसी किसी चीज़ में अनुरोध का निरीक्षण करने का प्रयास किया है? जैसा कि आपने बताया है, इसे सामग्री-प्रकार के लिए सामग्री-प्रकार की आवश्यकता है। लेकिन आप केवल स्वीकृति हेडर सेट कर रहे हैं।

प्रयास करें:

StringContent content = new StringContent(JsonConvert.SerializeObject(product), Encoding.UTF8, "application/json"); 
संबंधित मुद्दे