Я хочу отправить динамический объект, как
new { x = 1, y = 2 };
как тело сообщения HTTP POST. Поэтому я пытаюсь написать
var client = new HttpClient();
но я не могу найти метод
client.PostAsJsonAsync()
Поэтому я попытался добавить пакет Microsoft.AspNetCore.Http.Extensions в project.json и добавить
using Microsoft.AspNetCore.Http.Extensions;
использовать пункт. Однако это не помогло мне.
Итак, как проще всего отправить запрос POST с телом JSON в ASP.NET Core?
Ответы:
Вы должны добавить ссылку на пакет «Microsoft.AspNet.WebApi.Client» (ознакомьтесь с примерами в этой статье ).
Без какого-либо дополнительного расширения вы можете использовать стандартный
PostAsync
метод:где
jsonInString
значение вы можете получить, позвонивJsonConvert.SerializeObject(<your object>);
источник
HttpClient
метод расширения (PostAsJsonAsync
) для использования вторым способом. Это позволяет избежать повторения кода.Я использую этот класс:
Пример использования:
источник
Content-Length:
заголовок HTTP?HttpClient
настроек, например, если один наборclient.DefaultRequestHeaders.TransferEncodingChunked = true
Content-Length
заголовков не будет установлен иTransfer-Encoding: chunked
будет установлен вместо него. Тем не менее, если кто-то создает подобный клиентуvar client = new HttpClient();
, заголовокContent-Length
будет установлен для этого класса контента по умолчанию.Я хотел бы добавить к принятому ответу, что вы также хотели бы добавить
Accept
заголовок кhttpClient
:источник
Вы правы, что это давно реализовано в .NET Core.
На момент написания статьи (сентябрь 2019 года)
project.json
файл NuGet 3.x + был замененPackageReference
(как описано на странице https://docs.microsoft.com/en-us/nuget/archive/project-json ).Чтобы получить доступ к
*Async
методамHttpClient
класса, ваш.csproj
файл должен быть правильно настроен.Откройте свой
.csproj
файл в текстовом редакторе и убедитесь, что первая строка<Project Sdk="Microsoft.NET.Sdk.Web">
(как указано на https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the -csproj-формат ).
Чтобы получить доступ к
*Async
методамHttpClient
класса, вам также необходимо иметь правильную ссылку на пакет в вашем.csproj
файле, например:(См. Https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference . Также: мы рекомендуем приложения, ориентированные на ASP.NET Core 2.1 и позже используйте метапакет Microsoft.AspNetCore.App , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage )
Такие методы, как
PostAsJsonAsync
,ReadAsAsync
,PutAsJsonAsync
иDeleteAsync
теперь должны работать из коробки. (Не требуется использование директивы.)Обновление: тег PackageReference больше не требуется в .NET Core 3.0.
источник