2011-06-12 26 views
5
 
HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(url); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded; charset=utf-8"; 

de datos de correos fue de envío (i CHECK utilizando Fiddler) de regresar de Yahoo:HttpWebRequest, Cómo enviar datos POST con Application/JSON Content-Type?

{ "error": { "código": - 1003, "detalle": "no admitido Tipo de contenido Error", "Descripción ":" no admitido Tipo de contenido de código de error "}", ": - 1003}

estoy escribiendo cliente de Yahoo Messenger que requieren application/json; charset = UTF-8 tipo como contenido, y cuando me puse:

 
request.ContentType = "application/json; charset=utf-8"; 

ningún puesto de envío de datos, regresaron de Yahoo:

{ "error": { "código": - 1005," detalle ":" no válido Error de argumento", "Descripción": "Error de argumento no válido"}, "código": - 1005}

ACTUALIZACIÓN

estaba intente enviar este 2 valores a través de método POST : presenceState & estado.

Como se indica en Yahoo Messager IM API soportado de tipo de contenido son application/json. Y en mi código, si fijo tipo de contenido a application/json, HttpWebRequest no envió a los 2 valores a través de POST.

+0

¿Está realmente seguro de que la solicitud no sale de su cliente, pero falla en el servidor? –

+0

Usando Fiddler, desde mi primer código el servidor yahoo devuelve este resultado JSON: {"error": {"code": - 1003, "detalle": "Error de tipo de contenido no soportado", "descripción": "Error de tipo de contenido no soportado"} , "código": - 1003}. Y el código de respuesta 400 (Solicitud incorrecta). – F8R

Respuesta

0

Según su error, el primero falla ya que el tipo de contenido de la solicitud no coincide con el de Yahoo. Esto tiene sentido y su segundo ejemplo va hacia la ruta correcta, pero según su publicación parece que está obteniendo una respuesta. Con el violín, debería poder comparar su publicación con la de una solicitud adecuada a través del sitio. Eso podría ayudar a identificar dónde está yendo mal.

Pero independientemente de que tengamos que ver un poco más de lo que está haciendo ya que no hay nada que muestre el contenido de su publicación para que la revisemos.

+0

Gracias por su reproducción, he editado mi pregunta y agregado más información sobre lo que estoy haciendo. – F8R

0

Mi error puede ser el mismo que el suyo. El problema se resuelve por tipo de cambio de presenceState en tipo int, no en tipo de cadena.

ClassLogon objLogon = new ClassLogon 
    { 
    presenceState = ***0***, 
    presenceMessage = "I am logn" 
    }; 

Espero que resuelva esto.

+0

Gracias por su reproducción, ¿usa HttpWebRequest y qué configuración usar? ¿Y puedes compartir tu código? – F8R

1

echar un vistazo en siguiente ejemplo

byte[] data = CreateData(value); 
var requst = (HttpWebRequest) WebRequest.Create(uri); 
requst.Method = "POST"; 
requst.ContentType = "application/json"; 
requst.ContentLength = data.Length; 
using (Stream stream = requst.GetRequestStream()) 
{ 
    stream.Write(data, 0, data.Length); 
} 

Dónde CreateData es

public static byte[] Create<T>(T value) 
{ 
    var serializer = new DataContractJsonSerializer(typeof (T)); 
    using (var stream = new MemoryStream()) 
    { 
     serializer.WriteObject(stream, value); 
     return stream.ToArray(); 
    } 
} 
0

yo estaba luchando con el mismo problema exacto. como se indica en la documentación (http://developer.yahoo.com/messenger/guide/ch01s04.html), debe tener un cuerpo vacío ({}) en la solicitud POST.

usando javascript jQuery &, envié una cadena sencilla objeto vacío en el cuerpo POST, y que funciona:

$.ajax({ 
     type: 'POST', 
     url: 'http://developer.messenger.yahooapis.com/v1/session', 
     data: JSON.stringify({ }), 
     processData: false, 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader('Authorization', OAuth.getAuthorizationHeader("yahooapis.com", message.parameters)); 
      xhr.setRequestHeader('Content-Type','application/json; charset=UTF-8'); 
      xhr.setRequestHeader('X-Yahoo-Msgr-User-Agent','YahooMessenger/1.0 (yourapp; 1.0.0.1)') 
     }}); 

espero que ayude.

Cuestiones relacionadas