HttpWebRequest,如何使用应用程序/ JSON内容类型发送POST数据?

| HttpWebRequest request =(HttpWebRequest)HttpWebRequest.Create(url); request.Method = \“ POST \”; request.ContentType = \“ application / x-www-form-urlencoded; charset = utf-8 \”; 雅虎返回了POST数据(我使用Fiddler检查): {\“错误\”:{\“代码\”:-1003,\“详细信息\”:\“不支持的内容类型错误\”,\“描述\”:\“不支持的内容类型错误\”}},\“代码\“:-1003} 我正在编写需要application / json的Yahoo Messanger客户端; charset = utf-8作为内容类型,当我设置时: request.ContentType = \“ application / json; charset = utf-8 \”; 没有发送POST数据,从Yahoo返回: {\“错误\”:{\“代码\”:-1005,\“详细信息\”:\“无效的参数错误\”,\“描述\”:\“无效的参数错误\”},\“代码\ “:-1005} 更新 我试图通过POST方法发送这2个值:presentationState和status。 如Yahoo Messager IM API中所述,受支持的内容类型为application / json。 在我的代码中,如果将content-type设置为application / json,则HttpWebRequest不会通过POST发送这两个值。     
已邀请:
        看下面的例子
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();
    }
}
    
        根据您的错误,第一个失败,因为请求的内容类型与Yahoo期望的内容类型不匹配。这很有道理,您的第二个示例正在朝正确的方向前进,但是根据您的发帖,您似乎正在得到回应。使用小提琴手,您应该能够将您的发布与通过网站进行的适当请求的发布进行比较。这可能有助于查明问题所在。 但是无论我们将需要看到您在做什么,因为没有任何内容可以显示您的帖子供我们查看。     
        我正在为完全相同的问题而苦苦挣扎。 如文档(http://developer.yahoo.com/messenger/guide/ch01s04.html)中所述,在POST请求中需要有一个空的正文({})。 使用javascript和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)\')
        }});
希望能有所帮助。     
        我参加聚会的时间太晚了,但是我最后还是想弄清楚自己在搞什么,所以也许这会对别人有所帮助。 如果在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标头即可。     
        我的错误可能与您的错误相同。通过将“ 5”的类型更改为int类型而不是字符串类型,可以解决此问题。
ClassLogon objLogon = new ClassLogon
  {
    presenceState = ***0***,
    presenceMessage = \"I am logn\"
  };
希望您能解决这个问题。     

要回复问题请先登录注册