2015-06-24 6 views
24

मैं सी # में अपने वेबएपीआई बैकएंड पर JSON डेटा कैसे प्राप्त करूं?वेबएपीआई बैकएंड सी # पर जेएसओएन डेटा कैसे प्राप्त करें?

मेरे पास निम्नलिखित जावास्क्रिप्ट मेरे जावास्क्रिप्ट फ्रंटेंड से भेजा गया है।

{ 
    "User_Id": 1, 
    "TotalPrice": 35, 
    "DeliveryAddress": "At my house", 
    "CartItems": [ 
     { 
      "Id": 1009, 
      "Name": "Superman juni 2014", 
      "Quantity": 1, 
      "Price": 35 
     } 
    ] 
} 

मैं इस वर्ग:

public class PurchaseOrder 
    {   
     public List<CartItem> CartItems { get; set; } 
     public string DeliveryAddress { get; set; } 
     public int TotalPrice { get; set; } 
     public int User_Id { get; set; } 
    } 
public class CartItem 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public int Quantity { get; set; } 
     public int Price { get; set; } 
    } 

और मेरे वेबएपीआई विधि:

[System.Web.Mvc.HttpPost] 
     public bool AddOrder(PurchaseOrder order) 
     { 
      // Here I will do something 

      return true; 
     } 

मैं सिर्फ अपने "PurchaseOrder आदेश" वस्तु के लिए परिणाम के रूप में "अशक्त" मिलता है। क्या समस्या यह हो सकती है कि मैं [System.Web.Mvc.HttpPost] का उपयोग कर रहा हूं? मैंने [System.Web.Http.HttpPost] भी कोशिश की है, लेकिन एक ही परिणाम प्राप्त करें। // मार्टिन

+1

क्या आप जावास्क्रिप्ट अनुरोध पर सामग्री-प्रकार 'एप्लिकेशन/जेसन' पर सेट करते हैं? – Markus

+0

क्या आप पूर्ण जावास्क्रिप्ट अनुरोध शामिल कर सकते हैं? – DavidG

+0

अपने डेटा के साथ 'ऑर्डर' नामक एक जावास्क्रिप्ट ऑब्जेक्ट बनाएं और पोस्ट करते समय 'JSON.stringify' का उपयोग करें। –

उत्तर

11

अपने अनुरोध की Content-Type होना चाहिए "application/json"

आप अनुरोध की एक संस्था में अपने json पोस्ट करते हैं की तुलना में

[HttpPost] 
public bool AddOrder([FromBody] PurchaseOrder order) 
{ 
} 
+0

'सामग्री टाइप'। –

+0

'[FromBody] 'आवश्यक नहीं हो सकता है। WebApi के लिए –

0

के लिए एक विधि हस्ताक्षर बदलने पर भी यह करने के लिए अपने कार्यान्वयन बदलें।

[System.Web.Http.HttpPost] 
public bool AddOrder([FromBody] PurchaseOrder order) 
{ 

} 

अधिक जानकारी के लिए - http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

+0

, आपको इस विशेषता का उपयोग करना चाहिए '[System.Web.Http.HttpPost] ' –

+0

@ कॉलम लिइंगटन हाँ मैं गलत था। धन्यवाद –

-4

NuGet से Newtonsoft.Json पैकेज का उपयोग करें। उनके पास जेसन को किसी भी स्ट्रिंग को क्रमबद्ध और deserialize करने के लिए कार्य है। गतिशील प्रकार चर का उपयोग करने का भी प्रयास करें। Deserializing के लिए मदद करता है।

+5

यह एक उत्तर नहीं है। –

+0

या तो कोई जवाब नहीं। –

5

समस्या हल हो गई, यह "एप्लिकेशन/जेसन" था जो गायब था। अन्य व्यक्तियों के लिए एक ही समस्या है, यहां मेरा कार्य है। मैं Knockout.js का उपयोग कर रहा हूं, इसलिए "स्वयं" शब्द।

self.makePurchase = function() { 
      var tempUserId = self.orderUserId(); 
      var tempCartPrice = self.ShoppingCartPrice(); 
      var tempAddress = self.orderAddress(); 
      var tempCart = self.ShoppingCart(); 

      var orderSave = new PurchaseSave(tempUserId, tempCartPrice, tempAddress, tempCart); 
      var myData = ko.toJSON(orderSave); 
      console.log(myData); 

      $.ajax({ 
       type: "POST", 
       async: false, 
       url: '/Products/AddOrder', 
       contentType: "application/json", // Thank you Stackoverflow!!! 
       dataType: "json", 
       traditional: true, 
       data: myData, 
       error: function (xhr, textStatus, errorThrown) { 
        console.log(xhr.responseText); 
        console.log("Inside the error method"); 

       }, 
       success: function (data) { 
        console.log("Inside the success method"); 

       } 
      }); 
     } 
+0

'var self = this' एक आम बात है, बस आपको पता है कि आप किस चीज का जिक्र कर रहे हैं क्योंकि यह अंदर आने पर 'त्रुटि: फ़ंक्शन() {}' कह सकता है। –

संबंधित मुद्दे