Я только что получил это исключение (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);
источник
HttpClient
иHttpRequestMessage
?У меня была аналогичная проблема с использованием Flurl.Http:
Flurl.Http.FlurlHttpException: Call failed. Cannot send a content-body with this verb-type. GET http://******:8301/api/v1/agents/**** ---> System.Net.ProtocolViolationException: Cannot send a content-body with this verb-type.
Проблема была в том, что я использовал
.WithHeader("Content-Type", "application/json")
при создании IFlurlRequest.источник
Потому что вы не указали заголовок.
Я добавил расширенный пример:
var request = (HttpWebRequest)WebRequest.Create(strServer + strURL.Split('&')[1].ToString());
Заголовок (запрос ссылки, p_Method);
И метод Header:
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; }
источник
Перед чтением потока ответов установите тип содержимого запроса;
request.ContentType = "text/xml";
источник