2013-10-26 4 views
8

पर सी # ऑब्जेक्ट भेजना मैं एक वेब एपीआई नियंत्रक को सी # ऑब्जेक्ट पास करने का प्रयास कर रहा हूं। एपीआई को उस प्रकार के उत्पाद को स्टोर करने के लिए कॉन्फ़िगर किया गया है जो इसे पोस्ट किया गया है। मैंने Jquery Ajax विधि का उपयोग करके सफलतापूर्वक ऑब्जेक्ट्स जोड़े हैं और अब मैं सी # में एक ही परिणाम प्राप्त करने की कोशिश कर रहा हूं।वेबपै नियंत्रक

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public decimal Price { get; set; } 
} 

     static void Main(string[] args) 
    { 
     string apiUrl = @"http://localhost:3393/api/products"; 
     var client = new HttpClient(); 
     client.PostAsJsonAsync<Product>(apiUrl, new Product() { Id = 2, Name = "Jeans", Price = 200, Category = "Clothing" }); 

    } 

postproduct विधि लागू नहीं किया जाता है, कैसे नियंत्रक को यह वस्तु भेजने के लिए:

मैं एक साधारण कंसोल आवेदन api के लिए एक पोस्ट अनुरोध भेजने के लिए बना लिया है?

विधि आइटम जोड़ने के लिए प्रयोग किया है: जैसे आप किसी भी तरह पोस्ट करने के लिए प्रारूप के रूप में JSON को स्वीकार करने को निष्क्रिय कर दिया

public HttpResponseMessage PostProduct([FromBody]Product item) 
    { 
     item = repository.Add(item); 
     var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item); 

     string uri = Url.Link("DefaultApi", new { id = item.Id }); 
     response.Headers.Location = new Uri(uri); 
     return response; 
    } 
+0

आपका कोड ठीक लगता है, आप फिडलर में क्या देखते हैं? क्या आपने सर्वर पर वेबपी ट्रेसिंग सक्षम की है? –

+0

मैं उन अनुरोधों को देख सकता हूं जो एक फॉर्म से उत्पन्न हैं जिसका उपयोग मैं कर रहा हूं HttpClient द्वारा भेजे गए कोई अनुरोध फिडलर में दिखाई नहीं दे रहे हैं। मैंने एपीआई को भी अपलोड किया है: http://producttestapi.azurewebsites.net/api/products लेकिन HttpClient से अनुरोधों में से कोई भी एपीआई तक पहुंच नहीं है। – neo112

+0

भी, उस यूआरएल के index.html की जांच करें, यह वह फॉर्म है जिसका उपयोग मैं AJAX के माध्यम से ऑब्जेक्ट भेजने के लिए करता हूं, जो कोई काम करता है, इसलिए एपीआई ठीक है। – neo112

उत्तर

16

लग रहा है। मैं डेटा को आपके एंडपॉइंट पर भेजने और application/x-www-form-urlencoded का उपयोग करके नया उत्पाद बनाने में सक्षम था। शायद यह है कि आपका jQuery अनुरोध यह कैसे कर रहा है।

क्या आप अपने वेब एपीआई का कॉन्फ़िगरेशन कोड दिखा सकते हैं? क्या आप डिफ़ॉल्ट स्वरूपण बदलते हैं?

या आप HttpClient से एक फॉर्म भेज सकते हैं। जैसे

string apiUrl = "http://producttestapi.azurewebsites.net/api/products"; 
    var client = new HttpClient(); 
    var values = new Dictionary<string, string>() 
     { 
      {"Id", "6"}, 
      {"Name", "Skis"}, 
      {"Price", "100"}, 
      {"Category", "Sports"} 
     }; 
    var content = new FormUrlEncodedContent(values); 

    var response = await client.PostAsync(apiUrl, content); 
    response.EnsureSuccessStatusCode(); 
+0

AJAX विधि में 'डेटा टाइप: "जेसन" परिभाषित किया गया है। इसलिए यह मुझे लगता है कि नियंत्रक अभी भी जेएसओएन डेटा के रूप में स्वीकार करता है। मैंने उस विधि को जोड़ा जो सूची में नई वस्तुओं को जोड़ता है। मैं कॉन्फ़िगरेशन कोड दिखाऊंगा, क्या यह App_Start फ़ोल्डर से एक .cs फ़ाइल है? इस बीच, यहां पोस्ट किए गए अपहरण का प्रयास करने जा रहे हैं। – neo112

+0

मैं आपके द्वारा दिए गए कोड का उपयोग करके PostAsJson विधि का उपयोग करने में सक्षम था और अब यह काम करता है। महोदय आपका बहुत बहुत धन्यवाद! – neo112

+0

यदि हम कक्षा में स्ट्रिंग सरणी जैसे पैरामीटर हैं तो हम क्या कर सकते हैं। मैं इसे शब्दकोश में सेट नहीं कर सकता क्योंकि FormUrlEncodedContent शब्दकोश स्वीकार नहीं कर रहा है Yasitha