دفق و XmlTextWriter ... لم يتم استلام الطلب بشكل صحيح

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

  •  24-09-2019
  •  | 
  •  

سؤال

أنا عالق في هذه المشكلة httpwebrequest. أحتاج إلى إرسال XML إلى موقع ويب. لكني أستمر في الحصول على ردود سلبية بناء على طلبي. لقد رأيت بعض أمثلة التعليمات البرمجية حيث تم تعيين طول المحتوى ... وقد يكون ذلك هو المشكلة ولكني لا أعرف ....

XML المكتوبة في WritePaymentRequest (...) هو بالضبط كما يحتاج الموقع إلى أن يكون ، لأنهم حصلوا على علامة XML الخاصة بي ونجحوا ، بلغة برمجة أخرى. تحتوي النتيجة فقط على خطأها بدلاً من المعلومات التي من المفترض أن أتلقاها.

لا يمكنني ضبط طول المحتوى لأنني لا أعرف الطول عندما أقوم بإنشاء الكاتب مع requeststream فيه.

HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://some.website.com");
httpWebRequest.Method = "POST";
httpWebRequest.ContentType = "application/x-www-form-urlencoded";

using (writer = new XmlTextWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.UTF8))
{
 writePaymentRequest(writer, registrant, amount, signature, ipaddress);
}

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
String stringResult = streamReader.ReadToEnd();
streamReader.Close();
هل كانت مفيدة؟

المحلول

ستعرف الطول إذا كتبت XMLTextWriter إلى شيء مثل MemoryStream أولاً. من هناك ، يمكنك الحصول على البايتات ، وضبط httpwebrequest.contenterlength على طول صفيف البايت ، ثم اكتب مجموعة البايت على طلبك

تعديل

سيبدو منتصف الكود الخاص بك مثل هذا (على ما أظن):

    MemoryStream ms = new MemoryStream();
    using (writer = new XmlTextWriter(ms, System.Text.Encoding.UTF8))
    {
        writePaymentRequest(writer, registrant, amount, signature, ipaddress);
    }
    byte[] bytes = ms.ToArray();
    ms.Close();
    httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length);
    httpWebRequest.ContentLength = bytes.Length;

تحرير #2

بدلاً من XmlTextWriter(ms, System.Text.Encoding.UTF8), ، محاولة XmlTextWriter(ms, new UTF8Encoding(false)) لمعرفة ما إذا كان ذلك يحدد مشكلة التشفير

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top