HttpWebRequest request = (HttpWebRequest) HttpWebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
从Yahoo返回的POST数据(我使用Fiddler检查):
{“error”:{“code”: - 1003,“detail”:“不支持的内容类型错误”,“说明”:“不支持的内容类型错误”},“代码”: - 1003}
我正在编写需要 application / json的Yahoo Messanger客户端; charset = utf-8 作为内容类型,当我设置:
request.ContentType = "application/json; charset=utf-8";
从Yahoo返回没有POST数据发送:
{“error”:{“code”: - 1005,“detail”:“无效的参数错误”,“description”:“无效的参数错误”},“code”: - 1005}
更新
我尝试通过POST方法发送这两个值: presenceState &的状态
如Yahoo Messager IM API中所述内容类型是 application / json 。 在我的代码中,如果我将内容类型设置为 application / json ,则 HttpWebRequest 不会通过POST发送这两个值。
答案 0 :(得分:2)
看看以下示例
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);
}
CreateData
的位置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();
}
}
答案 1 :(得分:0)
根据您的错误,第一个失败,因为请求的内容类型与Yahoo期望的内容类型不匹配。这是有道理的,你的第二个例子是走向正确的道路,但根据你的帖子,你似乎得到了回应。使用提琴手,您应该能够通过网站将您的帖子与正确的请求进行比较。这可能有助于找出出错的地方。
但是,无论我们需要多看一些您正在做的事情,因为没有任何内容显示您帖子的内容供我们审核。
答案 2 :(得分:0)
我正在努力解决同样的问题。 如文档(http://developer.yahoo.com/messenger/guide/ch01s04.html)中所述,您需要在POST请求中有一个空主体({})。
使用javascript&amp; jQuery,我在POST主体中发送了一个简单的空对象字符串,并且有效:
$.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)')
}});
希望有所帮助。
答案 3 :(得分:0)
我在派对上已经很晚了,但我最终在这里想弄清楚我搞砸了什么,所以也许这会帮助别人。
如果在您的c#代码中设置内容类型,然后添加其他标题 - 如下所示:
httpWebRequest.ContentType = @"application/json; charset=utf-8";
WebHeaderCollection headers = new WebHeaderCollection();
headers.Add("Authorization", "Bearer "+oAuthBearerToken);
httpWebRequest.Headers = headers;
实际发生的是,当你写入.ContentType时,它会在你的请求的WebHeaderCollection中设置Content-Type。然后你继续并覆盖它们。在添加一堆自定义标头之前,这可能会发生在您设置的任何标头上。如果您正在执行此操作,请先设置自定义标头,然后写入.Whichever标头。
答案 4 :(得分:-1)
我的错误可能与您的错误相同。通过将presenceState
的更改类型更改为int类型而不是字符串类型来解决此问题。
ClassLogon objLogon = new ClassLogon
{
presenceState = ***0***,
presenceMessage = "I am logn"
};
我希望你解决这个问题。