RestSharp JSON पैरामीटर पोस्टिंग


141

मैं अपने MVC 3 एपीआई के लिए एक बहुत ही बुनियादी REST कॉल करने की कोशिश कर रहा हूं और मेरे द्वारा पारित किए जाने वाले पैरामीटर एक्शन विधि से बाध्य नहीं हैं।

ग्राहक

var request = new RestRequest(Method.POST);

request.Resource = "Api/Score";
request.RequestFormat = DataFormat.Json;

request.AddBody(request.JsonSerializer.Serialize(new { A = "foo", B = "bar" }));

RestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

सर्वर

public class ScoreInputModel
{
   public string A { get; set; }
   public string B { get; set; }
}

// Api/Score
public JsonResult Score(ScoreInputModel input)
{
   // input.A and input.B are empty when called with RestSharp
}

क्या मुझसे कोई चूक हो रही है?

जवाबों:


211

आपको स्वयं शरीर को क्रमबद्ध करने की आवश्यकता नहीं है। बस करो

request.RequestFormat = DataFormat.Json;
request.AddBody(new { A = "foo", B = "bar" }); // uses JsonSerializer

यदि आप इसके बजाय सिर्फ POST params चाहते हैं (जो अभी भी आपके मॉडल पर मैप करेगा और बहुत अधिक कुशल है क्योंकि JSON के लिए कोई क्रमांकन नहीं है) ऐसा करें:

request.AddParameter("A", "foo");
request.AddParameter("B", "bar");

4
दोनों। दूसरा तरीका हालांकि बहुत तेज़ है।
वेस्ले तन्ने

4
आप ऐसा AddObject(new { A = "foo", B = "bar" })भी कर सकते हैं जो वस्तु के गुणों को लेता है और उन्हें मापदंडों में परिवर्तित करता है
जॉन शीहान

62
उन लोगों के लिए जो खुद को खुश करना चाहते हैं:request.AddParameter("text/json", body, ParameterType.RequestBody);
काइल पैटरसन

1
@KylePatterson आप इसे इस्तेमाल करने के लिए अपने खुद के ISerializer को भी लागू कर सकते हैं और RestClient.JsonSerializer सेट कर सकते हैं।
जॉन शीहान

2
request.AddBody(new ...आपके पहले उदाहरण में एक के बाद एक अप्रचलित परांठे हैं ।
बेंजामिन

54

RestSharp (105.2.3.0) के वर्तमान संस्करण में आप अनुरोध निकाय के साथ एक JSON ऑब्जेक्ट जोड़ सकते हैं:

request.AddJsonBody(new { A = "foo", B = "bar" });

यह विधि सामग्री प्रकार को अनुप्रयोग / json पर सेट करती है और ऑब्जेक्ट को JSON स्ट्रिंग में क्रमबद्ध करती है।


1
इस अनुरोध को फ़ाइल कैसे संलग्न करें?
ओपीवी

1
आप वस्तु का नाम कैसे देंगे? जैसे। अगर आपको "विवरण" भेजने की आवश्यकता है: {"अतिरिक्त": "सामान"}?
mdgges

@OPV आप इस तरह से अनुरोध करने के लिए एक फ़ाइल जोड़ सकते हैं: request.AddFile (pathToTheFile);
क्रिस मॉर्गन

1
@mdegges यदि आप एक अनाम वर्ग का उपयोग कर रहे हैं जैसे कि शरीर में JSON है, तो आपका उदाहरण सेटअप जैसा दिखता है, इस तरह से रिस्ट्रिक्शन रिक्वेस्ट सेटअप करें: var client = new RestSharp.RestClient("http://your.api.com"); var request = new RestSharp.RestRequest("do-something", Method.POST); var body = new {details = new {extras = "stuff"}}; request.AddJsonBody(body); var response = client.Execute(request);
क्रिस मॉर्गन

43

यह मेरे लिए काम किया है, मेरे मामले के लिए यह लॉगिन अनुरोध के लिए एक पोस्ट था:

var client = new RestClient("http://www.example.com/1/2");
var request = new RestRequest();

request.Method = Method.POST;
request.AddHeader("Accept", "application/json");
request.Parameters.Clear();
request.AddParameter("application/json", body , ParameterType.RequestBody);

var response = client.Execute(request);
var content = response.Content; // raw content as string  

तन :

{
  "userId":"sam@company.com" ,
  "password":"welcome" 
}

2
आप अपने c # कोड में बॉडी कैसे डालते हैं? स्ट्रिंग बॉडी के रूप में = "{" userId ":" sam@company.com "," पासवर्ड ":" वेलकम "}"; काम नहीं करता।
कन्नौ

1
आपको "" स्ट्रिंग बॉडी = @ "" {"" यूजरिड "" के बजाय "" का उपयोग करना चाहिए, ... "
विटाली एस्कुलोव

7

उम्मीद है कि यह किसी की मदद करेगा। यह मेरे लिए काम किया -

RestClient client = new RestClient("http://www.example.com/");
RestRequest request = new RestRequest("login", Method.POST);
request.AddHeader("Accept", "application/json");
var body = new
{
    Host = "host_environment",
    Username = "UserID",
    Password = "Password"
};
request.AddJsonBody(body);

var response = client.Execute(request).Content;

लगता request.AddHeader("Accept", "application/json");है सही उत्तर है।
बिमल पौडेल

0

यदि आपके पास कोई Listवस्तु है, तो आप उन्हें निम्नानुसार JSON में अनुक्रमित कर सकते हैं:

List<MyObjectClass> listOfObjects = new List<MyObjectClass>();

और फिर उपयोग करें addParameter:

requestREST.AddParameter("myAssocKey", JsonConvert.SerializeObject(listOfObjects));

और आपको अनुरोध प्रारूप निर्धारित करने की आवश्यकता है JSON:

requestREST.RequestFormat = DataFormat.Json;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.