2012-06-28 18 views
19

मैं एक एपीआई के साथ काम कर रहा हूँ और सी # के भीतर एक JSON PUT अनुरोध करने के लिए कोशिश कर रहा। यह वह कोड है जिसका मैं उपयोग कर रहा हूं:पासिंग मूल्यों

public static bool SendAnSMSMessage() 
    { 
     var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://apiURL"); 
     httpWebRequest.ContentType = "text/json"; 
     httpWebRequest.Method = "PUT"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = **// Need to put data here to pass to the API.** 

      streamWriter.Write(json); 
     } 
     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var responseText = streamReader.ReadToEnd(); 
      //Now you have your response. 
      //or false depending on information in the response 
      return true; 
     } 
    } 

समस्या यह है कि मैं यह नहीं समझ सकता कि एपीआई को डेटा कैसे पास किया जाए। तो जावास्क्रिप्ट में जैसे मैं कुछ इस तरह करते हैं डेटा पास करने होगा:

 type: 'PUT', 
     data: { 'reg_FirstName': 'Bob', 
       'reg_LastName': 'The Guy', 
       'reg_Phone': '123-342-1211', 
       'reg_Email': '[email protected]', 
       'reg_Company': 'None', 
       'reg_Address1': 'Some place Dr', 
       'reg_Address2': '', 
       'reg_City': 'Mars', 
       'reg_State': 'GA', 
       'reg_Zip': '12121', 
       'reg_Country': 'United States' 

मैं सी # में एक ही करने के बारे में कैसे जाना होगा? धन्यवाद!

उत्तर

13
httpWebRequest.ContentType = "text/json"; 

निश्चित रूप से होना चाहिए:

httpWebRequest.ContentType = "application/json"; 

कि मैं कुछ भी अपने वर्तमान कोड के साथ गलत नहीं दिख रहा है के अलावा।

जहां तक ​​JSON पीढ़ी हिस्सा आप एक JSON serializer इस्तेमाल कर सकते हैं का सवाल है:

var serializer = new JavaScriptSerializer(); 

string json = serializer.Serialize(new 
{ 
    reg_FirstName = "Bob", 
    reg_LastName = "The Guy", 
    ... and so on of course 
}); 

इस उदाहरण मैं स्पष्ट रूप से एक गुमनाम वस्तु का इस्तेमाल किया है, लेकिन आप में बिल्कुल ठीक एक मॉडल जिसका गुण से मेल खाते हैं और फिर पारित निर्धारित कर सकते हैं इस मॉडल का एक उदाहरण Serialize विधि पर। आप Json.NET लाइब्रेरी को भी चेकआउट करना चाहेंगे जो एक तृतीय पक्ष JSON serializer है जो अंतर्निहित .NET की तुलना में हल्का और तेज़ है।


लेकिन सब कहा जा रहा है, तो आप भी आगामी .NET 4.5 के रूप में ASP.NET Web API बारे में सुना है और साथ ही हो सकता है। यदि आपने किया है, तो आपको अवगत होना चाहिए कि एक एपीआई HTTP वेब क्लाइंट (HttpClient) होगा जो विशेष रूप से उन आवश्यकताओं के लिए तैयार किया गया है। JSON सक्षम API का उपभोग करने के लिए WebRequest का उपयोग कुछ महीनों में अप्रचलित कोड के रूप में माना जाएगा। क्योंकि आप अभी इस नए ग्राहक का उपयोग करें और गरीब आत्मा (.NET XX के लिए अपने कोड विस्थापित करने के लिए काम सौंपा) है कि अपने कोड पर अब और शायद से कुछ साल दिखेगा के जीवन को आसान बनाने के NuGet इस्तेमाल कर सकते हैं मैं इस उल्लेख कर रहा हूँ यह भी नहीं पता कि WebRequest क्या है :-)

+0

बिल्कुल सही! बस मुझे क्या चाहिए! धन्यवाद! –

10

यदि आप .NET C# क्लाइंट से जावास्क्रिप्ट व्यवहार की नकल करना चाहते हैं तो आपको ContentType के अलावा, अनुरोध ऑब्जेक्ट पर कुछ अतिरिक्त कॉन्फ़िगरेशन भी सेट करना होगा, यहां एक है काम कर रहे उदाहरण:

string serializedObject = Newtonsoft.Json.JsonConvert.SerializeObject(entity); 
HttpWebRequest request = WebRequest.CreateHttp(storeUrl); 
request.Method = "PUT"; 
request.AllowWriteStreamBuffering = false; 
request.ContentType = "application/json"; 
request.Accept = "Accept=application/json"; 
request.SendChunked = false; 
request.ContentLength = serializedObject.Length; 
using (var writer = new StreamWriter(request.GetRequestStream())) 
{ 
    writer.Write(serializedObject); 
} 
var response = request.GetResponse() as HttpWebResponse; 

इस तरह पूरी सामग्री अनुरोध के साथ भेजा जाएगा, इसलिए ASP.NET MVC वेबएपीआई डेटा बाइंडरों उनके जादू काम कर सकते हैं।

जरूरत नहीं कहने के लिए आप सामग्री आकार के रूप में यह एक बार में सभी भेजा जाएगा, नहीं ही स्ट्रीम/हिस्सा एड पर सावधान रहना चाहिए।

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