Я немного не уверен, как сделать мой пост-запрос в C #.Я попытался сделать это в Почтальоне, и он работает там без проблем.Я думаю, что моя проблема заключается в форматировании JSON.Я создаю свой JSON с JObjects в библиотеке Newtonsoft.Когда приведенный ниже код выполняется, это вывод;{"accountreference":"XX","messages":"[{\r\n \"to\": \"+XXXXX\",\r\n \"body\": \"XXXXXXXX\"\r\n}]"}
Это допустимо, но, как вы можете видеть, оно содержит разрывы строк и escape-символы.После публикации его в API, который я использую, я всегда получаю неверный запрос 400.
Я пробовал различные сериализаторы и методы, но не смог заставить его работать.Я также удостоверился, что заголовок Authroization является правильным, если он был неправильным, API должен был сказать это в своем сообщении возврата.По мнению разработчиков API, это сообщение должно появиться только в том случае, если тело неверно.Я попытался опубликовать строку с переносами строк в Почтальоне, что также дает 400. Есть ли простой способ избавиться от них?
var tmpObj = new JObject {{"to", to}, {"body", message}};
var jsonObj = new JObject
{
{"accountreference", MessageConfiguration.Ref}, {"messages", "[" + tmpObj + "]"}
};
var json = jsonObj.ToString(Formatting.None);
var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var url = new Uri("www.xxxxxxxx/hjdhsf");
return await PostAsync(url, httpContent);
protected async Task<HttpResponseMessage> PostAsync(Uri endpoint, HttpContent content)
{
using (var httpClient = NewHttpClient())
{
var result = await httpClient.PostAsync(endpoint, content);
return result; //Statuscode is 400 here.
}
}
Этот действительный json работает в Почтальоне:
{
"accountreference":"XXXXX",
"messages":[{
"to":"XXXXX",
"body":"XXX!"
}]
}
Обновление:
Согласно ответу, я попробовал это:
var body = new
{
accountreference = MessageConfiguration.Ref,
messages = new[]
{
new
{
to = to,
body = message
}
}
};
var json = new JavaScriptSerializer().Serialize(body);
Теперь JSON выглядит правильно, и я даже мог бы скопировать его из VS в почтальона иэто сработало. Однако мои запросы в VS все еще возвращают 400.