在restful json web服务中发布数据c#

时间:2013-03-22 16:19:39

标签: c# json postdata

如何在json中发布数据?因为我一直收到错误消息,我没有通过参数。这是我的c#代码:

点击按钮:url = szAPIURL + url;

WebClient postWithParamsClient = new WebClient();
postWithParamsClient.UploadStringCompleted += 
  new UploadStringCompletedEventHandler(postWithParamsClient_UploadStringCompleted);

postWithParamsClient.Headers["Content-Length"] = postdata.Length.ToString();
postWithParamsClient.UploadStringAsync(new Uri(url), 
                                       "POST", 
                                       "?username=name123&password=pass123");

private void postWithParamsClient_UploadStringCompleted(object sender, 
                                                UploadStringCompletedEventArgs e)
{
    if (e.Error == null)
      MessageBox.Show("WebClient: " + e.Result);
    else
      MessageBox.Show("WebClient: " + e.Error.Message);
}

这是我从电话中收到的内容:

[{"error_code":2,"error_messages":["You must specify login user name and password"],"tokenid":"","userid":0}]

这是原始的ajax api:

var msgData = {};
msgData ['username'] = szUserName;
msgData ['password'] = szEncryptedPassword;

$。AJAX({
url:szAPIURL +“Authenticate”,
类型:'POST',
//数据需要发布服务器。
// data:JSON.stringify({data:“test”}),
data:msgData,
/ * dataType:“jsonp”,* /
dataType:“json”,

2 个答案:

答案 0 :(得分:1)

在做同样的事情时我需要做一些事情(尽管我使用的是UploadString而不是UploadStringAsync)。

首先,我需要将它添加到Headers集合中:

postWithParamsClient.Headers.Add("Content-Type", "application/json");

然后就像Jevgenij提到的那样,你必须将数据实际发送为JSON字符串,如下所示:

postWithParamsClient.UploadStringAsync(new Uri(url), 
                                   "POST", 
                                   "{ \"username\": \"name123\", \"password\": \"pass123\" }");

更新:如果您未传递第二个参数"POST",该方法会自动将其作为POST提交给您。

另外,另外,由于WebClient是IDisposable,我建议在使用语句中使用它,如:

using (postWithParamsClient = new WebClient()) { }

答案 1 :(得分:0)

不确定,但UploadStringAsync的第三个参数是您要发送的实际数据。您可能想将"?username=name123&password=pass123"放入网址?

这样的事情:

client.UploadStringAsync(new Uri(string.Format("{0}?{1}", url, "username=name123&password=pass123")), "POST", "<your data>");