我有一个使用NameValueCollection的c#代码,然后使用webclient将发布请求发送到API。
我需要使用一个等效请求,但是使用javascript而不是c#,我尝试了以下操作:
$.ajax({
type: "POST",
url: "https://api.pushover.net/1/messages.json",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {
"message": "xyz",
"token": "xyz",
"user": "xyz",
},
success: function(data) {
console.log("push sent!");
}
});
但是我收到一个400错误,指出“错误的请求”。
由于令牌和用户对用户可用,因此请忽略安全性观点。
c#代码为:
var parameters = new NameValueCollection {
{ "token", "xyz" },
{ "user", "xyz" },
{ "message", "xyz" }
};
using (var client = new WebClient())
{
client.UploadValues("https://api.pushover.net/1/messages.json", parameters);
}
答案 0 :(得分:0)
我现在不在我的机器上,因此无法测试,但是我想您可能没有在c#中的webclient的Header
属性中设置内容类型,因此defaulting to application/x-www-form-urlencoded
,但是在javascript中,您将内容类型设置为application/json
。如果服务器未设置为接受该类型,则将出现400错误。
答案 1 :(得分:0)
这可能是由于"user": "xyz",
中的逗号引起的。尾随逗号is disallowed in json,而在c#中则是完美有效。
我使用Postman (在使用API时强烈建议)进行测试。。
使用逗号我们会得到简单的400-错误的请求:
没有逗号,我们至少得到一个无效的令牌: