2009-06-18 10 views
14

कोड निहारना:डेटा पोस्ट करने के बाद वेब क्लाइंट प्रतिक्रिया कैसे पढ़ा जाए?

using (var client = new WebClient()) 
{ 
    using (var stream = client.OpenWrite("http://localhost/", "POST")) 
    { 
     stream.Write(post, 0, post.Length); 
    } 
} 

अब, मैं HTTP उत्पादन कैसे पढ़ा करते हैं?

+0

इसके अलावा http://stackoverflow.com/questions/1694388/webclient-vs-httpwebrequest-httpwebresponse देखें:

using (var client = new WebClientWithResponse()) { using (var stream = client.OpenWrite(myUrl)) { // open a huge local file and send it using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { file.CopyTo(stream); } } // get response as an array of bytes. You'll need some encoding to convert to string, etc. var bytes = client.Response; } 

और यहाँ अनुकूलित WebClient है। – DuckMaestro

उत्तर

19

ऐसा लगता है कि आपके पास पोस्ट करने के लिए byte[] है; जो मामले मैं उम्मीद में आप इसे आसान उपयोग करने के लिए मिल जाएगा:

byte[] response = client.UploadData(address, post); 

और अगर प्रतिक्रिया है पाठ, कुछ की तरह:

string s = client.Encoding.GetString(response); 

(या Encoding की अपनी पसंद - शायद Encoding.UTF8)

+0

यह काम करेगा, अगर मैं एक HTTP 500 प्रतिक्रिया पढ़ने की कोशिश नहीं कर रहा था, जो एक अपवाद बन जाता है। लेकिन आपका जवाब निश्चित रूप से प्रश्न की आवश्यकताओं को पूरा करता है। –

+0

आप तब प्रश्न को स्पष्ट करना चाहते हैं; इसमें HttpWebRequest का उपयोग शामिल हो सकता है ... –

+0

प्रश्न जारी रहा http://stackoverflow.com/questions/1015020/how-to-read-an-asp-net-internal-server-error-description-with-net –

2

यदि आप हर जगह स्ट्रीम रखना चाहते हैं और बाइट्स के विशाल सरणी आवंटित करने से बचें, जो अच्छी प्रथा है (उदाहरण के लिए, यदि आप बड़ी फाइलें पोस्ट करने की योजना बना रहे हैं), तो भी आप इसे वेब क्लाइंट के व्युत्पन्न संस्करण के साथ कर सकते हैं। यहां एक नमूना कोड है जो यह करता है।

public class WebClientWithResponse : WebClient 
{ 
    // we will store the response here. We could store it elsewhere if needed. 
    // This presumes the response is not a huge array... 
    public byte[] Response { get; private set; } 

    protected override WebResponse GetWebResponse(WebRequest request) 
    { 
     var response = base.GetWebResponse(request); 
     var httpResponse = response as HttpWebResponse; 
     if (httpResponse != null) 
     { 
      using (var stream = httpResponse.GetResponseStream()) 
      { 
       using (var ms = new MemoryStream()) 
       { 
        stream.CopyTo(ms); 
        Response = ms.ToArray(); 
       } 
      } 
     } 
     return response; 
    } 
} 

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

  • कोई संबंधित समस्या नहीं^_^