Не удается отправить тело содержимого с этим типом глагола
Я только что получил это исключение (ProtocolViolationException) в моем приложении .NET 2.0 (работает на стандартном эмуляторе windows mobile 6). Что меня смущает, так это то, что, насколько я знаю, я не добавил никакого тела контента, если я случайно не сделал это каким-то образом. Мой код ниже (очень простой). Есть ли что-нибудь еще, что мне нужно сделать, чтобы убедить .NET, что это просто http GET?
спасибо, Брайан
//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);
3 ответа:
не получить поток запроса, довольно просто. Получить запросы не обычно есть тела (хотя это технически не запрещено HTTP) и
WebRequest
не поддерживает его - но это то, что вызовGetRequestStream
предназначен для предоставления данных тела для запроса.учитывая, что вы пытаетесь читать из потока, мне кажется, вы на самом деле хотите получить ответ и прочитать поток ответа от что:
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); ... } }
потому что вы не указали в заголовке.
я добавил расширенный пример:
var request = (HttpWebRequest)WebRequest.Create(strServer + strURL.Split('&')[1].ToString());
заголовок (ref request, p_Method);
и заголовок метода:
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; }