C # में WebClient के माध्यम से URL पर पोस्टिंग JSON


87

मेरे पास कुछ जावास्क्रिप्ट कोड हैं जिन्हें मुझे C # में बदलने की आवश्यकता है। मेरा जावास्क्रिप्ट कोड एक वेब सेवा के लिए कुछ JSON पोस्ट करता है। यह जावास्क्रिप्ट कोड ठीक काम करता है और निम्नलिखित की तरह दिखता है:

var vm = { k: "1", a: "2", c: "3", v: "4" };
$.ajax({
  url: "http://www.mysite.com/1.0/service/action",
  type: "POST",
  data: JSON.stringify(vm),
  contentType: "application/json;charset=utf-8",
  success: action_Succeeded,
  error: action_Failed
});

function action_Succeeded(r) {
  console.log(r);
}

function log_Failed(r1, r2, r3) {
  alert("fail");
}

मैं यह पता लगाने की कोशिश कर रहा हूं कि इसे C # में कैसे परिवर्तित किया जाए। मेरा ऐप .NET 2.0 का उपयोग कर रहा है। जो मैं बता सकता हूं, उससे मुझे निम्नलिखित की तरह कुछ करने की आवश्यकता है:

using (WebClient client = new WebClient())
{
  string json = "?";
  client.UploadString("http://www.mysite.com/1.0/service/action", json);
}

मैं इस बिंदु पर थोड़ा अटक गया हूं। मुझे यकीन नहीं है कि क्या jsonदिखना चाहिए। मुझे यकीन नहीं है कि मुझे सामग्री प्रकार सेट करने की आवश्यकता है। यदि मैं करता हूं, तो मुझे यकीन नहीं है कि ऐसा कैसे करना है। मैंने भी देखा UploadData। इसलिए, मुझे यकीन नहीं है कि मैं सही विधि का उपयोग कर रहा हूं। एक मायने में, मेरे डेटा का क्रमांकन मेरी समस्या है।

क्या कोई मुझे बता सकता है कि मैं यहाँ क्या याद कर रहा हूँ?

धन्यवाद!

जवाबों:


70

अपनी सामग्री को पार्स करने के लिए आपको एक जसन धारावाहिक की आवश्यकता होती है, शायद आपके पास पहले से ही है, आपके शुरुआती प्रश्न के लिए कि अनुरोध कैसे करना है, यह एक विचार हो सकता है:

var baseAddress = "http://www.example.com/1.0/service/action";

var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";

string parsedContent = <<PUT HERE YOUR JSON PARSED CONTENT>>;
ASCIIEncoding encoding = new ASCIIEncoding();
Byte[] bytes = encoding.GetBytes(parsedContent);

Stream newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();

var response = http.GetResponse();

var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();

आशा करता हूँ की ये काम करेगा,


1
"parsedContent" कैसा दिखना चाहिए? दुर्भाग्य से, मुझे इस परिदृश्य में मैन्युअल रूप से अपना JSON बनाने की आवश्यकता है। धन्यवाद।
ईल फैन

क्या यह सिर्फ JSON जैसा दिख सकता है? या क्या मुझे कुछ विशेष एन्कोडिंग करने की ज़रूरत है जो मुझे मिल रहा है।
ईल फैन

@EelsFan आमतौर पर किसी भी JSON पार्सर को चुनने में कोई समस्या नहीं है, आप JSON.Net को हमेशा JSON में एक .net ऑब्जेक्ट पार्स करने के लिए कर सकते हैं, लेकिन मेरे अनुभव में कुछ क्लाउड सेवाएं थीं जिनका एक अलग JSON पार्सर संस्करण था और मुझे कुछ बनाना था। बदलाव। अपने परिदृश्य के लिए सबसे अच्छा क्या है, यह चर्चा आपको JSON.Net stackoverflow.com/questions/9573119/… के
जोर्ज अल्वाराडो

5
आप ASCIIEncoding का उपयोग क्यों करते हैं, और UTF8 का नहीं? Stackoverflow.com/a/9254967/109392 देखें ।
खौफ

2
+1 मैंने पहली बार ओपी का उपयोग करने की कोशिश की WebClient, और यह काम करने के लिए नहीं मिला। तब मैंने इस टालमटोल की कोशिश की, और यह एक आकर्षण की तरह काम किया। मैं बाइट सरणी बनाने के UTF8Encodingबजाय उपयोग कर रहा था ASCIIEncoding, क्योंकि मुझे एएससीआईआई का उपयोग करने का कोई कारण नहीं दिखता है, जो उपलब्ध वर्णों को इस तरह से अस्वीकार कर देता है जो अस्वीकार्य है। ASCII में चारसेट में केवल 127 अक्षर हैं।
भय

197

इस सवाल का जवाब पहले से ही है, लेकिन मुझे लगता है कि मैंने इसका हल ढूंढ लिया है जो प्रश्न शीर्षक के लिए अधिक सरल और अधिक प्रासंगिक है, यहां यह है:

var cli = new WebClient();
cli.Headers[HttpRequestHeader.ContentType] = "application/json";
string response = cli.UploadString("http://some/address", "{some:\"json data\"}");

1
और, अपने json को "पठनीय" बनाने के लिए: (vb.net में) मंद json = <JSON> {"फ़ील्ड 1": "value1", "स्थिति": "लंबित", "objField": {"field2": true} } </ JSON> .ToString
foxontherock

लेकिन उस जॉगन स्ट्रिंग में मापदंडों के निर्गमन के बारे में क्या?
ताली बी।

74

निम्न उदाहरण दर्शाता है कि WebClient.UploadString विधि के माध्यम से एक JSON पोस्ट कैसे करें :

var vm = new { k = "1", a = "2", c = "3", v=  "4" };
using (var client = new WebClient())
{
   var dataString = JsonConvert.SerializeObject(vm);
   client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
   client.UploadString(new Uri("http://www.contoso.com/1.0/service/action"), "POST", dataString);
}

आवश्यकताएँ: Json.NET पुस्तकालय


4
मुझे लगता है कि यदि आप पूर्ण ईवेंट का उपयोग कर रहे हैं, तो UploadStringAsync होना चाहिए।
सैम मैकक्रिल

आप POSTतर्क को छोड़ सकते हैं क्योंकि UploadStringइस पद्धति का डिफ़ॉल्ट रूप से उपयोग किया जाता है। इसके अलावा client.Headers.Add(HttpRequestHeader.Accept, "application/json");यदि आप JSONवापसी के रूप में अपेक्षा करते हैं तो आप जोड़ना चाह सकते हैं ।
जिमासुन

क्या WebClient वास्तव में आईडीसिसोपयोगी लागू करता है? मैं कुछ साल बाद .NET फ्रेमवर्क 4.7.1 में काम कर रहा हूं और मैं इसे नहीं देखता।
बबलिंग

2
@bubbleking मैंने WebClient पर F12 पर क्लिक किया और देखा कि यह एक कंपोनेंट और कंपोनेंट का इम्प्लीमेंट है IDisposablepublic class WebClient : Component public class Component : MarshalByRefObject, IComponent, IDisposable
Lars Persson
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.