J'essaie d'appeler une API Web à partir de mon application Web. J'utilise .Net 4.5 et lors de l'écriture du code, j'obtiens l'erreur HttpClient
ne contient pas de PostAsJsonAsync
méthode de définition .
Voici le code:
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;
et je reçois le message d'erreur:
Erreur: 'System.Net.Http.HttpClient' ne contient pas de définition pour 'PostAsJsonAsync' et Aucune méthode d'extension 'PostAsJsonAsync' acceptant un premier argument de type 'System.Net.Http.HttpClient' a pu être trouvée (vous manque-t-il un en utilisant une directive ou une référence d'assembly?)
Veuillez me consulter et me conseiller.
c#
json
asp.net-web-api
dotnet-httpclient
Jidheesh Rajan
la source
la source
Réponses:
Oui, vous devez ajouter une référence à
Cela peut être trouvé dans la zone des assemblages d'extensions.
Un bon moyen d'y parvenir est d'ajouter le package NuGet
Microsoft.AspNet.WebApi.Client
à votre projet.la source
PostAsJsonAsync
n'est plus dansSystem.Net.Http.dll
(.NET 4.5.2). Vous pouvez ajouter une référence àSystem.Net.Http.Formatting.dll
, mais cela appartient en fait à une ancienne version. J'ai rencontré des problèmes avec cela sur notre serveur de build TeamCity, ces deux ne coopéreraient pas ensemble.Alternativement, vous pouvez remplacer
PostAsJsonAsync
par unPostAsync
appel, qui n'est qu'une partie de la nouvelle DLL. RemplacerAvec:
Notez que
JavaScriptSerializer
est dans l'espace de noms:System.Web.Script.Serialization
.Vous devrez ajouter une référence d'assemblage dans votre csproj:
System.Web.Extensions.dll
Voir https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
la source
await FooAsync()
au lieu deFooAsync().Result
. Ce dernier peut se bloquer. Voir stackoverflow.com/q/17248680/2272514 et sa réponse acceptée. Il existe également de bons liens sur les détails.La référence manquante est le
System.Net.Http.Formatting.dll
. Mais la meilleure solution consiste à ajouter le package NuGetMicrosoft.AspNet.WebApi.Client
pour garantir que la version de la DLL de formatage fonctionne avec la version du framework .NET deSystem.Net.Http
dans mon projet.la source
Comme déjà débattue, cette méthode n'est plus disponible depuis .NET 4.5.2. Pour développer la réponse de Jeroen K, vous pouvez créer une méthode d'extension:
Vous pouvez maintenant appeler
client.PostAsJsonAsync("api/AgentCollection", user)
.la source
J'ai également eu ce problème sur un projet que je venais de vérifier depuis le contrôle de code source.
Le symptôme était l'erreur décrite ci-dessus et un triangle d'avertissement jaune sur une référence à
System.Net.Http.Formatting
Pour résoudre ce problème, j'ai supprimé la référence cassée, puis utilisé NuGet pour installer la dernière version de
Microsoft.AspNet.WebApi.Client
.la source
Install-Package Microsoft.AspNet.WebApi.Client
Je sais que cette réponse est trop tard, j'ai eu le même problème et
System.Net.Http.Formatting.Extension
j'ajoutais le Nuget, après avoir vérifié ici et là j'ai trouvé que le Nuget était ajouté maisSystem.Net.Http.Formatting.dll
n'a pas été ajouté aux références, je viens de réinstaller le Nugetla source
Essayez d'installer dans votre projet le package NuGet: Microsoft.AspNet.WebApi.Client:
la source
Au lieu d'écrire cette quantité de code pour passer un simple appel, vous pouvez utiliser l'un des wrappers disponibles sur Internet.
J'en ai écrit un appelé WebApiClient, disponible sur NuGet ... vérifiez-le!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
la source
Si vous jouez dans Blazor et obtenez l'erreur, vous devez ajouter le package
Microsoft.AspNetCore.Blazor.HttpClient
.la source
En développant simplement la réponse de Jeroen avec les conseils dans les commentaires:
la source