Отправить сообщение 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 69

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();