У меня есть следующий код, который прекрасно работает, когда метод "POST", но изменение на "GET" не работает:
HttpWebRequest request = null;
request = HttpWebRequest.Create(uri) as HttpWebRequest;
request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
request.Method = "POST"; // Doesn't work with "GET"
request.BeginGetRequestStream(this.RequestCallback, null);
Я получаю исключение ProtocolViolationException
с помощью метода "GET".
Редактировать: После просмотра с использованием Reflector кажется, что есть явная проверка для метода "GET", если он установлен на то, что он выдает исключение.
Edit2: Я обновил свой код до следующего, но он по-прежнему выдает исключение при вызове EndGetResponse ()
if (request.Method == "GET")
{
request.BeginGetResponse(this.ResponseCallback, state);
}
else
{
request.BeginGetRequestStream(this.RequestCallback, state);
}
В моей функции ResponseCallback у меня есть это:
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
Что также вызывает исключение.
Ответ
Вышеприведенный код теперь работает, я забыл вынуть строку Content-Type, которая вызывала исключение в конце. +1 к настройке и ответ Джону.
Рабочий код теперь ниже:
HttpWebRequest request = null;
request = HttpWebRequest.Create(uri) as HttpWebRequest;
request.Method = "GET";// Supports POST too
if (request.Method == "GET")
{
request.BeginGetResponse(this.ResponseCallback, state);
}
else
{
request.BeginGetRequestStream(this.RequestCallback, state);
}