HttpClient no admite el método PostAsJsonAsync C#

Resuelto Jidheesh Rajan asked hace 10 años • 15 respuestas

Estoy intentando llamar a una API web desde mi aplicación web. Estoy usando .Net 4.5 y mientras escribo el código aparece el error HttpClientque no contiene un PostAsJsonAsyncmétodo de definición.

A continuación se muestra 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 pudo encontrar ningún método de extensión 'PostAsJsonAsync' que acepte un primer argumento del tipo 'System.Net.Http.HttpClient' (¿falta un ¿Usando directiva o una referencia de ensamblaje?)

Por favor echa un vistazo y aconséjame.

Jidheesh Rajan avatar Oct 03 '13 18:10 Jidheesh Rajan
Aceptado

Sí, necesitas agregar una referencia a

System.Net.Http.Formatting.dll

Esto se puede encontrar en el área de ensamblajes de extensiones.

Una buena forma de lograrlo es agregando el paquete NuGetMicrosoft.AspNet.WebApi.Client a su proyecto.

Justin Harvey avatar Oct 03 '2013 11:10 Justin Harvey

PostAsJsonAsyncya no está en System.Net.Http.dll(.NET 4.5.2). Puede agregar una referencia a System.Net.Http.Formatting.dll, pero en realidad pertenece a una versión anterior. Tuve problemas con esto en nuestro servidor de compilación TeamCity, estos dos no cooperaban juntos.

Alternativamente, puede reemplazarlo PostAsJsonAsynccon una PostAsyncllamada, que es solo parte del nuevo dll. Reemplazar

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

Con:

var response = client.PostAsync("api/AgentCollection", new StringContent(
   new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;

Tenga en cuenta que JavaScriptSerializerestá en el espacio de nombres: System.Web.Script.Serialization.

Tendrás que agregar una referencia de ensamblaje en tu csproj:System.Web.Extensions.dll

Consulte https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836

Jeroen K avatar Jan 04 '2016 15:01 Jeroen K