Estoy tratando de llamar a una API web desde mi aplicación web. Estoy usando .Net 4.5 y mientras escribo el código obtengo el error HttpClient
no contiene un PostAsJsonAsync
método de definición .
Debajo está el código:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
y recibo el mensaje de error:
Error: 'System.Net.Http.HttpClient' no contiene una definición para 'PostAsJsonAsync' y no se puede encontrar ningún método de extensión 'PostAsJsonAsync' que acepte un primer argumento de tipo 'System.Net.Http.HttpClient' (falta un usando una directiva o una referencia de ensamblaje?)
Por favor, eche un vistazo y me aconseje.
c#
json
asp.net-web-api
dotnet-httpclient
Jidheesh Rajan
fuente
fuente
Respuestas:
Sí, necesita agregar una referencia a
Esto se puede encontrar en el área de ensambles de extensiones.
Una buena manera de lograr esto es agregando el paquete NuGet
Microsoft.AspNet.WebApi.Client
a su proyecto.fuente
PostAsJsonAsync
ya no está enSystem.Net.Http.dll
(.NET 4.5.2). Puede agregar una referencia aSystem.Net.Http.Formatting.dll
, pero en realidad pertenece a una versión anterior. Me encontré con problemas con esto en nuestro servidor de compilación TeamCity, estos dos no cooperarían juntos.Alternativamente, puede reemplazar
PostAsJsonAsync
con unaPostAsync
llamada, que es solo parte de la nueva DLL. ReemplazarCon:
Tenga en cuenta que
JavaScriptSerializer
está en el espacio de nombres:System.Web.Script.Serialization
.Deberá agregar una referencia de ensamblaje en su csproj:
System.Web.Extensions.dll
Ver https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
fuente
await FooAsync()
lugar deFooAsync().Result
. Este último puede llegar a un punto muerto. Consulte stackoverflow.com/q/17248680/2272514 y su respuesta aceptada. También hay buenos enlaces sobre detalles.La referencia que falta es la
System.Net.Http.Formatting.dll
. Pero la mejor solución es agregar el paquete NuGetMicrosoft.AspNet.WebApi.Client
para asegurar que la versión del dll de formato funcionó con la versión de .NET Framework deSystem.Net.Http
mi proyecto.fuente
Como ya se debatió, este método ya no está disponible desde .NET 4.5.2. Para ampliar la respuesta de Jeroen K, puede hacer un método de extensión:
Ahora puedes llamar
client.PostAsJsonAsync("api/AgentCollection", user)
.fuente
También tuve este problema en un proyecto que acababa de sacar del control de código fuente.
El síntoma fue el error descrito anteriormente y un triángulo de advertencia amarillo en una referencia a
System.Net.Http.Formatting
Para solucionar esto, eliminé la referencia rota y luego usé NuGet para instalar la última versión de
Microsoft.AspNet.WebApi.Client
.fuente
Install-Package Microsoft.AspNet.WebApi.Client
Sé que esta respuesta es demasiado tarde, tuve el mismo problema y estaba agregando el
System.Net.Http.Formatting.Extension
Nuget, después de verificar aquí y allá encontré que el Nuget se agregó peroSystem.Net.Http.Formatting.dll
no se agregó a las referencias, simplemente reinstalé el Nugetfuente
Intente instalar en su proyecto el paquete NuGet: Microsoft.AspNet.WebApi.Client:
fuente
En lugar de escribir esta cantidad de código para hacer una llamada simple, puede usar uno de los contenedores disponibles en Internet.
He escrito uno llamado WebApiClient, disponible en NuGet ... ¡échale un vistazo!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
fuente
Si estás jugando en Blazor y obtienes el error, debes agregar el paquete
Microsoft.AspNetCore.Blazor.HttpClient
.fuente
Simplemente expandiendo la respuesta de Jeroen con los consejos en los comentarios:
fuente