StringContent отправляется как пустой объект на узел - PullRequest
2 голосов
/ 01 февраля 2020

У меня есть C# рабочий стол, который должен использовать HttpClient для отправки запроса на API моего узла. Проблема в том, что JSON, который получает приложение узла, отличается от того, что я собираюсь. Я попытался использовать приведенный ниже пример, и я прочитал из StringContent и увидел, что он содержит ожидаемые значения, но он отображается в приложении узла как {};

User user = new User
{
    Username = username,
    Password = password
};
StringContent content = new StringContent(JsonConvert.SerializeObject(user)); 
HttpResponseMessage response = await client.PostAsJsonAsync("auth", content);

Я также пытался похожий код, но вместо StringContent я использовал только строку, подобную этой:


User user = new User
{
    Username = username,
    Password = password
};
StringContent content = JsonConvert.SerializeObject(user); 
HttpResponseMessage response = await client.PostAsJsonAsync("auth", content);

Но это дает мне ошибку об неожиданном токене "в JSON в позиции 0;

Пожалуйста, помогите мне понять как я могу отправить правильно сериализованный объект пользователя. Я бы предпочел сделать это без реализации ISerializable, если это возможно. Вот мой класс данных пользователя:

namespace Cloud_Calendar
{
    class User
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }
}

Я думаю, что было бы полезно увидеть, что мой узел при этом вот оно:

let failCount = 0;
app.all('/failAuth', (req, res) => {
  console.log("failed" + (++failCount));
  console.log(req.body);
  res.send('failure to authenticate user');
});

app.post('/main', (req, res) => {   //this will be removed & replaced with routes for each action
res.send('success');
});


app.post('/auth', passport.authenticate('local', { failureRedirect: '/failAuth' }), (req, res) => {
//TODO: if success parse req.body to search for req.body.action variable and redirect based on value
console.log(`req.body.action: ${req.body.action}`); //this indicates desired action
  try{
    res.redirect(308, '/main');
  }catch(err){
    console.error(err);
  }
});

req.body зарегистрирован как пустой ... это из-за перенаправления?

1 Ответ

2 голосов
/ 01 февраля 2020

С PostAsJsonAsync вам нужно передать объект как есть. Внутренне он будет сериализовать объект, создаст StringContent и запишет это через HttpClient

Так что либо используйте PostAsJsonAsync, как это было задумано

User user = new User
{
    Username = username,
    Password = password
};
HttpResponseMessage response = await client.PostAsJsonAsync("auth", user);

, либо выполните сериализацию самостоятельно (в основном то, что PostAsJsonAsync делает внутри)

User user = new User
{
    Username = username,
    Password = password
};
string json = JsonConvert.SerializeObject(user);
StringContent content = new StringContent(josn, Encoding.UTF8, "application/json"); 
HttpResponseMessage response = await client.PostAsync("auth", content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...