tengo el siguiente código, que funciona muy bien cuando el método es "POST", pero cambiando a "GET" no funciona:¿Cómo uso HttpWebRequest con el método 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);
Puedo obtener un ProtocolViolationException
excepción con el método "GET".
Editar: Después de echar un vistazo utilizando Reflector, parece que hay una comprobación explícita para el método "OBTENER", si está configurado para que arroje la excepción.
Edit2: He actualizado mi código a la siguiente, pero todavía se produce una excepción cuando llamo EndGetResponse()
if (request.Method == "GET")
{
request.BeginGetResponse(this.ResponseCallback, state);
}
else
{
request.BeginGetRequestStream(this.RequestCallback, state);
}
En mi función, ResponseCallback, tengo esto:
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult);
Lo cual arroja la excepción también.
respuesta
El código anterior funciona ahora, me había olvidado de sacar la línea Content-Type que estaba causando la excepción de ser arrojado al final. +1 a tweakt & respuesta a Jon.
El código de trabajo está ahora por debajo de:
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);
}
¿Sigue siendo una excepción de ProtocolViolation? ¿Puedes producir un programa corto pero completo que demuestre el problema? ¿Has mirado el cable (por ejemplo, con Wireshark) para ver qué está sucediendo? –
Gracias por las actualizaciones ... eso solucionó mi problema también. – TravisWhidden
Esos dos métodos son completamente diferentes: 'BeginGetResponse' es para hacer la solicitud web, mientras' BeginGetRequestStream' es para escribir los datos en la transmisión. –