将NameValueCollection转换为等效的javascript

时间:2019-05-24 15:13:36

标签: javascript c# namevaluecollection

我有一个使用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);
    }

2 个答案:

答案 0 :(得分:0)

我现在不在我的机器上,因此无法测试,但是我想您可能没有在c#中的webclient的Header属性中设置内容类型,因此defaulting to application/x-www-form-urlencoded,但是在javascript中,您将内容类型设置为application/json。如果服务器未设置为接受该类型,则将出现400错误。

答案 1 :(得分:0)

这可能是由于"user": "xyz",中的逗号引起的。尾随逗号is disallowed in json,而在中则是完美有效。

我使用Postman (在使用API​​时强烈建议)进行测试。

使用逗号我们会得到简单的400-错误的请求:

With a comma

没有逗号,我们至少得到一个无效的令牌:

enter image description here