Отправить сообщение HTTP POST in ASP.NET ядро с использованием HttpClient PostAsJsonAsync
Я хочу отправить динамический объект, как
new { x = 1, y = 2 };
как тело сообщения HTTP POST. Поэтому я стараюсь писать
var client = new HttpClient();
но я не могу найти способ
client.PostAsJsonAsync()
поэтому я попытался добавить Microsoft.AspNetCore.Http.Пакет расширений для проекта.JSON и добавить
using Microsoft.AspNetCore.Http.Extensions;
to использует предложение. Однако это мне не помогло.
так что это самый простой способ, чтобы отправить POST-запрос с JSON тела в ASP.NET ядром?
4 ответа:
вы должны добавить ссылку на "Microsoft.сеть САШ.Веб-API.Клиент " пакет (читать в этой статье для образцов).
без каких-либо дополнительных расширений, вы можете использовать стандартный
PostAsync
способ:client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));
здесь
jsonInString
значение вы можете получить, позвонивJsonConvert.SerializeObject(<your object>);
Я использую этот класс:
public class JsonContent : StringContent { public JsonContent(object obj) : base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json") { } }
пример использования:
new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));
Я бы добавил к принятому ответу, что вы также хотите добавить
Accept
заголовокhttpClient
:httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
можно использовать IEnterprise.Легко-HTTP так как он встроен в класс разбора:
await new RequestBuilder<ExampleObject>() .SetHost("https://httpbin.org") .SetContentType(ContentType.Application_Json) .SetType(RequestType.Post) .SetModelToSerialize(dto) .Build() .Execute();