NameValueCollection в эквивалентный JavaScript - PullRequest
0 голосов
/ 24 мая 2019

У меня есть код на c #, который использует NameValueCollection, а затем веб-клиент для отправки запроса на публикацию в 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 голосов
/ 26 мая 2019

Это, вероятно, из-за запятой в "user": "xyz",. Завершающая запятая запрещена в json , в то время как совершенная действует в .

Я протестировал его, используя Почтальон (я настоятельно рекомендую при работе с API) .

С запятой мы получаем простой 400 - Плохой запрос:

With a comma

Без запятой мы получаем как минимум неверный токен:

enter image description here

0 голосов
/ 26 мая 2019

Я сейчас не на своей машине, поэтому не могу проверить это, но я думаю, что вы не устанавливаете тип содержимого в свойстве Header веб-клиента в c #, то есть по умолчанию application/x-www-form-urlencoded, но в javascript вы устанавливаете тип контента на application/json.Если сервер не настроен на прием этого типа, вы получите ошибку 400.

...