كيفية قراءة استجابة WebClient بعد نشر البيانات؟

StackOverflow https://stackoverflow.com/questions/1014935

  •  06-07-2019
  •  | 
  •  

سؤال

وها رمز:

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

والآن، كيف يمكنني قراءة الناتج HTTP؟

هل كانت مفيدة؟

المحلول

ويبدو ان لديك byte[] البيانات للنشر. في هذه الحالة أتوقع أنك سوف تجد أنه من الأسهل لاستخدام:

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

وإذا كان الرد هو النص، شيء مثل:

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

و(أو اختيارك للEncoding - ربما Encoding.UTF8)

نصائح أخرى

إذا كنت تريد أن تبقي تيارات في كل مكان وتجنب تخصيص صفائف ضخمة من بايت، وهي ممارسة جيدة (على سبيل المثال، إذا كنت تخطط لنشر ملفات كبيرة)، لا تزال تستطيع ان تفعل ذلك مع نسخة مشتقة من WebClient. هنا هو نموذج التعليمات البرمجية التي تقوم به.

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 مخصصة:

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;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top