2013-05-10 16 views
5

पर शून्य पैरामीटर उत्पन्न करने के लिए एप्लिकेशन/जेसन को शरीर में प्रीपेन्ड करता है मेरे पास एक वेब एपीआई सेवा है जिसे मैं RestSharp का उपयोग कर कंसोल के माध्यम से एक्सेस करने का प्रयास कर रहा हूं। मेरा RestSharp कोड इस तरह दिखता है:RestSharp के साथ वेब एपीआई कॉल - एक्शन

  RestClient client = new RestClient(baseUrlString); 
     RestRequest request = new RestRequest("controllername/actionname"); 
     request.RequestFormat = DataFormat.Json; 

     ProcessQuestion model = new ProcessQuestion() 
     { 
      Id = "123456", 
      InstanceId = "123", 
      UniqueId = "bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626", 
      PostedAnswer = new Dictionary<string, string>() { { "question_7907_1", "selected" }, { "question_7907_2", "selected" } } 
     }; 
     request.AddBody(model); 

     var response = client.Execute(request) 

मेरी वेब एपीआई कार्रवाई एक मॉडल लेती है जिसमें उपरोक्त मॉडल के समान पैरामीटर होते हैं। जब कॉल निष्पादित होता है, बाध्यकारी विफल रहता है और पैरामीटर शून्य है।

{application/json={"Id":"123456","InstanceId":"123","UniqueId":"bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626","PostedAnswer":{"question_7907_1":"selected","question_7907_2":"selected"}}} 

मैं फ़िडलर का उपयोग कर पोस्ट करते हैं तो शरीर को ठीक से मॉडल को बांधता है: जैसा कि नीचे दिखाया मुझे लगता है इस RestRequest.AddBody विधि prepending आवेदन/json शरीर मूल्य के लिए की वजह से है।

{'Id':'123456','InstanceId':'123','Uniqueid':'bfb16a18-d0d6-46ab-a5b3-2f0ebbfe8626','PostedAnswer':{'question_7907_1':'selected','question_7907_2':'selected'}} 

ध्यान दें कि Fiddler में शरीर मूल्य आवेदन/json कुंजी prepending के अपवाद के साथ एक ही है: नीचे शरीर मूल्य मैं फ़िडलर में प्रदान की जाती है।

यह भी ध्यान दें: मैंने कोशिश की है कि सबकुछ कैसा लगता है ... मैंने पैरामीटर को अलग किया है, बॉडी और फ्रॉम यूरी फीचर्स का इस्तेमाल किया है, कस्टम डिक्शनरी मॉडेलबिन्डर की कोशिश की है, कस्टम वैल्यूबिंडर्स ने कोशिश की है, जिस तरह से मैं ' मैं RestSharp का उपयोग कर रहा हूं (एक अनुरोधबॉडी पैरामीटर के साथ AddParameter, AddObject, विभिन्न यूआरएल शैलियों, आदि)।

क्या किसी और को इसका सामना करना पड़ा है, और यदि हां, तो क्या आपने इसे हल किया? मैंने इस सेवा के लिए वेब एपीआई चुना है उम्मीद है कि मॉडल बाध्यकारी एमवीसी में काम करेगा, लेकिन मुझे लगता है कि यह मामला नहीं है।

धन्यवाद

संपादित करें (हल हो गई): RestSharp स्वचालित रूप से AddBody विधि में पारित वस्तुओं के लिए JsonSerializer उपयोग करता है। मुझे लगा कि मैं कुछ आसान याद कर रहा था, और वास्तव में मैं था ... विधि जोड़ना। RestRequest त्वरण के लिए पोस्ट पैरामीटर समस्या हल।

उत्तर

6
  1. जब अनुरोध बनाने विधि निर्दिष्ट करें:

    RestRequest request = new RestRequest("controllername/actionname", Method.POST);

  2. नहीं

    यकीन है कि क्या डिफ़ॉल्ट serializer शरीर के लिए है - आप इसे स्पष्ट करने का प्रयास कर सकते हैं:

    request.AddBody(request.JsonSerializer.Serialize(model));

  3. मुझे यकीन नहीं है कि 'एप्लिकेशन/जेसन' कहां से आ रहा है - वह कोंटे है एनटी-टाइप हेडर आपको अपने अनुरोध के साथ भेजना चाहिए, निश्चित रूप से शरीर का हिस्सा नहीं है। तो बजाय ऐसा करते हैं:

    request.AddHeader("Content-type", "application/json; charset=utf-8");

  4. यदि यह मदद नहीं करता है, अपने कोड के रूप में संभव के रूप में अपनी साइट पर उदाहरण की तरह बनाने का प्रयास करें। जटिलता को हटाने का प्रयास करें (भले ही इसका मतलब आवश्यक कार्यक्षमता को बदलना है) - इसे उस बिंदु पर प्राप्त करें जब यह काम करता है और उस पर अतिरिक्त कार्यक्षमता का निर्माण करता है।

http://restsharp.org/

+0

RestSharp स्वचालित रूप से AddBody विधि में पारित वस्तुओं के लिए JsonSerializer उपयोग करता है। मुझे लगा कि मैं कुछ आसान याद कर रहा था, और वास्तव में मैं था ... विधि जोड़ना। RestRequest त्वरण के लिए पोस्ट पैरामीटर समस्या हल। धन्यवाद। –

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