0

如何在 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",
type: 'POST',
// 数据需要发送到服务器。
//data: JSON.stringify({data:"test"}),
data: msgData,
/*dataType: "jsonp",*/
dataType: "json",

4

2 回答 2

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 语句中使用它,例如:

using (postWithParamsClient = new WebClient()) { }
于 2013-03-22T17:16:20.887 回答
0

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

像这样的东西:

client.UploadStringAsync(new Uri(string.Format("{0}?{1}", url, "username=name123&password=pass123")), "POST", "<your data>");
于 2013-03-22T16:42:55.483 回答