Ich versuche, eine Web-API aus meiner Webanwendung aufzurufen. Ich verwende .Net 4.5 und beim Schreiben des Codes erhalte ich den Fehler, HttpClient
der keine Definitionsmethode enthält PostAsJsonAsync
.
Unten ist der 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;
und ich erhalte die Fehlermeldung:
Fehler: 'System.Net.Http.HttpClient' enthält keine Definition für 'PostAsJsonAsync' und es konnte keine Erweiterungsmethode 'PostAsJsonAsync' gefunden werden, die ein erstes Argument vom Typ 'System.Net.Http.HttpClient' akzeptiert (fehlt Ihnen ein mit Direktive oder Assembly-Referenz?)
Bitte schauen Sie und beraten Sie mich.
c#
json
asp.net-web-api
dotnet-httpclient
Jidheesh Rajan
quelle
quelle
Antworten:
Ja, Sie müssen einen Verweis auf hinzufügen
Dies finden Sie im Bereich Erweiterungsbaugruppen.
Ein guter Weg, dies zu erreichen, ist das Hinzufügen des NuGet-Pakets
Microsoft.AspNet.WebApi.Client
zu Ihrem Projekt.quelle
PostAsJsonAsync
ist nicht mehr in derSystem.Net.Http.dll
.NET 4.5.2. Sie können einen Verweis auf hinzufügenSystem.Net.Http.Formatting.dll
, dieser gehört jedoch tatsächlich zu einer älteren Version. Ich hatte auf unserem TeamCity-Build-Server Probleme damit, diese beiden würden nicht zusammenarbeiten.Alternativ können Sie durch
PostAsJsonAsync
einenPostAsync
Aufruf ersetzen , der nur ein Teil der neuen DLL ist. ErsetzenMit:
Beachten Sie, dass
JavaScriptSerializer
sich im Namespace befindet :System.Web.Script.Serialization
.Sie müssen eine Assembly-Referenz in Ihr csproj einfügen:
System.Web.Extensions.dll
Siehe https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
quelle
await FooAsync()
stattFooAsync().Result
. Letzteres kann zum Stillstand kommen. Siehe stackoverflow.com/q/17248680/2272514 und die akzeptierte Antwort. Es gibt auch gute Links zu Details.Die fehlende Referenz ist die
System.Net.Http.Formatting.dll
. Die bessere Lösung besteht jedoch darin, das NuGet-Paket hinzuzufügen,Microsoft.AspNet.WebApi.Client
um sicherzustellen, dass die Version der Formatierungs-DLL mit der .NET Framework-Version vonSystem.Net.Http
in meinem Projekt funktioniert .quelle
Wie bereits diskutiert, ist diese Methode seit .NET 4.5.2 nicht mehr verfügbar. Um die Antwort von Jeroen K zu erweitern , können Sie eine Erweiterungsmethode erstellen:
Jetzt können Sie anrufen
client.PostAsJsonAsync("api/AgentCollection", user)
.quelle
Ich hatte dieses Problem auch bei einem Projekt, das ich gerade aus der Quellcodeverwaltung ausgecheckt hatte.
Das Symptom war der oben beschriebene Fehler und ein gelbes Warndreieck auf einem Verweis auf
System.Net.Http.Formatting
Um dies zu beheben, habe ich die fehlerhafte Referenz entfernt und dann mit NuGet die neueste Version von installiert
Microsoft.AspNet.WebApi.Client
.quelle
Install-Package Microsoft.AspNet.WebApi.Client
Ich weiß, dass diese Antwort zu spät ist, ich hatte das gleiche Problem und
System.Net.Http.Formatting.Extension
ich habe das Nuget hinzugefügt. Nachdem ich hier und da überprüft hatte, dass das Nuget hinzugefügt wurde, dasSystem.Net.Http.Formatting.dll
aber nicht zu den Referenzen hinzugefügt wurde, habe ich das Nuget einfach neu installiertquelle
Versuchen Sie, das NuGet-Paket in Ihrem Projekt zu installieren: Microsoft.AspNet.WebApi.Client:
quelle
Anstatt diese Menge an Code zu schreiben, um einen einfachen Anruf zu tätigen, können Sie einen der über das Internet verfügbaren Wrapper verwenden.
Ich habe einen mit dem Namen WebApiClient geschrieben, der bei NuGet erhältlich ist ... probieren Sie es aus!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
quelle
Wenn Sie in Blazor herumspielen und den Fehler erhalten, müssen Sie das Paket hinzufügen
Microsoft.AspNetCore.Blazor.HttpClient
.quelle
Erweitern Sie einfach Jeroens Antwort mit den Tipps in den Kommentaren:
quelle