Pertanyaan Tidak dapat mengirim isi-konten dengan jenis kata kerja ini


Saya baru saja mendapatkan pengecualian ini (ProtocolViolationException) di aplikasi .NET 2.0 saya (berjalan di windows mobile 6 standar emulator). Apa yang membingungkan saya adalah sejauh yang saya tahu, saya belum menambahkan konten apa pun, kecuali saya secara tidak sengaja telah melakukannya. Kode saya di bawah ini (sangat sederhana). Apakah ada hal lain yang perlu saya lakukan untuk meyakinkan. NET bahwa ini hanyalah sebuah GET http?

Terima kasih, brian

//run get and grab response
WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
Stream stream = request.GetRequestStream();           // <= explodes here
XmlTextReader reader = new XmlTextReader(stream);

75
2017-10-20 19:28


asal


Jawaban:


Jangan meminta aliran permintaan, cukup sederhana. DAPATKAN permintaan biasanya memiliki tubuh (meskipun itu tidak secara teknis dilarang oleh HTTP) dan WebRequest tidak mendukungnya - tapi itulah yang memanggil GetRequestStream adalah untuk, menyediakan data tubuh untuk permintaan tersebut.

Mengingat bahwa Anda sedang berusaha Baca baca dari aliran, sepertinya saya seperti Anda benar-benar ingin mendapatkan tanggapan dan baca aliran respons dari itu:

WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
using (WebResponse response = request.GetResponse())
{
    using (Stream stream = response.GetResponseStream())
    {
        XmlTextReader reader = new XmlTextReader(stream);
        ...
    }
}

121
2017-10-20 19:30



Karena Anda tidak menentukan Header.

Saya telah menambahkan contoh tambahan:

var request = (HttpWebRequest)WebRequest.Create(strServer + strURL.Split('&')[1].ToString());

Header (permintaan ref, p_Method);

Dan Header metode:

private void Header(ref HttpWebRequest p_request, string p_Method)
{
    p_request.ContentType = "application/x-www-form-urlencoded";
    p_request.Method = p_Method;
    p_request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows CE)";
    p_request.Host = strServer.Split('/')[2].ToString();
    p_request.Accept = "*/*";
    if (String.IsNullOrEmpty(strURLReferer))
    {
        p_request.Referer = strServer;
    }
    else
    {
        p_request.Referer = strURLReferer;
    }
    p_request.Headers.Add("Accept-Language", "en-us\r\n");
    p_request.Headers.Add("UA-CPU", "x86 \r\n");
    p_request.Headers.Add("Cache-Control", "no-cache\r\n");
    p_request.KeepAlive = true;
}

2
2017-08-18 20:35



Harap set permintaan Jenis Konten sebelum Anda membaca aliran tanggapan;

 request.ContentType = "text/xml";

-3
2018-04-23 07:29