Quiero enviar objetos dinámicos como
new { x = 1, y = 2 };
como cuerpo del mensaje HTTP POST. Entonces trato de escribir
var client = new HttpClient();
pero no puedo encontrar el método
client.PostAsJsonAsync()
Así que intenté agregar el paquete Microsoft.AspNetCore.Http.Extensions a project.json y agregar
using Microsoft.AspNetCore.Http.Extensions;
a la cláusula de usos. Sin embargo, no me ayudó.
Entonces, ¿cuál es la forma más fácil de enviar una solicitud POST con el cuerpo JSON en ASP.NET Core?
c#
asp.net-core
.net-core
Movimiento rápido del ojo
fuente
fuente
Respuestas:
Debe agregar una referencia al paquete "Microsoft.AspNet.WebApi.Client" (lea este artículo para ver ejemplos).
Sin ninguna extensión adicional, puede usar el
PostAsync
método estándar :donde
jsonInString
valor puede obtener llamandoJsonConvert.SerializeObject(<your object>);
fuente
HttpClient
método de extensión (PostAsJsonAsync
) para usar la segunda forma? Le permite evitar la repetición de código.Yo uso esta clase:
Muestra de uso:
fuente
Content-Length:
encabezado HTTP?HttpClient
configuración, por ejemplo, si unclient.DefaultRequestHeaders.TransferEncodingChunked = true
Content-Length
encabezado establecido no se establecería yTransfer-Encoding: chunked
se establecería en su lugar. Sin embargo, si uno crea el cliente comovar client = new HttpClient();
, el encabezadoContent-Length
se establecerá para esta clase de contenido de forma predeterminada.Agregaría a la respuesta aceptada que también desearía agregar el
Accept
encabezado ahttpClient
:fuente
Tiene razón en que esto se ha implementado desde hace mucho tiempo en .NET Core.
Al momento de escribir (septiembre de 2019), el
project.json
archivo de NuGet 3.x + ha sido reemplazado porPackageReference
(como se explica en https://docs.microsoft.com/en-us/nuget/archive/project-json ).Para obtener acceso a los
*Async
métodos de laHttpClient
clase, su.csproj
archivo debe estar configurado correctamente.Abra su
.csproj
archivo en un editor de texto plano y asegúrese de que la primera línea sea<Project Sdk="Microsoft.NET.Sdk.Web">
(como se señala en https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the -csproj-format ).
Para obtener acceso a los
*Async
métodos de laHttpClient
clase, también debe tener la referencia de paquete correcta en su.csproj
archivo, así:(Consulte https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference . Además: Recomendamos aplicaciones dirigidas a ASP.NET Core 2.1 y luego use el metapaquete Microsoft.AspNetCore.App , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage )
Los métodos como
PostAsJsonAsync
,ReadAsAsync
,PutAsJsonAsync
yDeleteAsync
ahora deben trabajar fuera de la caja. (No se necesita usar la directiva).Actualización: la etiqueta PackageReference ya no es necesaria en .NET Core 3.0.
fuente