Как правильно передать сериализованный объект через http?C#

Место общения программистов C#
Ответить
Anonymous
 Как правильно передать сериализованный объект через http?

Сообщение Anonymous »

Я использую шаблон API C# и пытаюсь протестировать пост-контроллер. Пусть будет какой-нибудь предмет

Код: Выделить всё

   var m = new Dictionary
{
{ "key", "value" },
};
После сериализации мы получаем следующую строку:

Код: Выделить всё

string jc  = JsonConvert.SerializeObject(m);      //     "{ \"key\": \"value\" }"
и после второй сериализации получим:

Код: Выделить всё

string jc2 = JsonConvert.SerializeObject(jc);     //   "\"{\\\"key\\\":\\\"value\\\"}\""
И после отправки запроса на публикацию со следующим кодом:

Код: Выделить всё

var jsonContent = new StringContent(jc2, Encoding.UTF8, "application/json");
HttpResponseMessage response1 = await client1.PostAsync("http:...", jsonContent);
// response1.StatusCode == "OK")
Я получаю «ОК» и могу правильно десериализовать содержимое запроса.
Если я удалю вторую сериализацию, я получу ответ1.StatusCode = «BadRequest».
1 .Как объяснить такое поведение?
2.Можно ли использовать для отправки запроса этот код

Код: Выделить всё

var jsonContent = new FormUrlEncodedContent(jc);
Как это сделать правильно?
P.S. На стороне сервера API есть только код шаблона ASP.NET Core Web API. Сначала я попытался передать однократную сериализацию с помощью строки JSONConvert и получил ошибку. Затем я посмотрел на сгенерированный код в Postman и увидел, что тело содержит контент, показанный в примере выше. Поэтому я использовал вторую сериализацию — чтобы получить рабочий код как в почтальоне. Его можно получить путем повторной сериализации. Хотя, возможно, это результат чего-то другого.
Код в API сервера:

Код: Выделить всё

[HttpPost]
public string Post([FromBody] string ukpJson)
{
return "Ok";
}
Изображение


Подробнее здесь: https://stackoverflow.com/questions/791 ... t-via-http
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»