Ich versuche, eine Web-API aus meiner Webanwendung aufzurufen. Ich verwende .Net 4.5 und erhalte beim Schreiben des Codes die Fehlermeldung HttpClient
enthält keine Definitionsmethode 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 wurde keine Erweiterungsmethode 'PostAsJsonAsync' gefunden, die ein erstes Argument vom Typ 'System.Net.Http.HttpClient' akzeptiert mit Direktive oder einer Assembly-Referenz?)
Bitte schauen Sie und beraten Sie mich.
Ja, Sie müssen einen Verweis hinzufügen
System.Net.Http.Formatting.dll
Diese finden Sie im Bereich Erweiterungsbaugruppen.
Eine gute Möglichkeit, dies zu erreichen, ist das Hinzufügen des NuGet-Pakets Microsoft.AspNet.WebApi.Client zu Ihrem Projekt.
PostAsJsonAsync
ist nicht mehr im System.Net.Http.dll
(.NET 4.5.2) enthalten. Sie können einen Verweis auf System.Net.Http.Formatting.dll
Hinzufügen, der jedoch zu einer älteren Version gehört. Ich hatte auf unserem TeamCity Build Server Probleme damit, diese beiden würden nicht zusammenarbeiten.
Alternativ können Sie PostAsJsonAsync
durch einen PostAsync
-Aufruf ersetzen, der nur Teil der neuen DLL ist. Ersetzen
var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;
Mit:
var response = client.PostAsync("api/AgentCollection", new StringContent(
new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;
Beachten Sie, dass sich JavaScriptSerializer
im Namespace befindet: System.Web.Script.Serialization
.
Sie müssen eine Assembly-Referenz in Ihren csproj einfügen: System.Web.Extensions.dll
Siehe https://code.msdn.Microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836
Die fehlende Referenz ist der System.Net.Http.Formatting.dll
. Die bessere Lösung ist jedoch, das NuGet-Paket Microsoft.AspNet.WebApi.Client
Hinzuzufügen, um sicherzustellen, dass die Version der Formatierungs-DLL mit der .NET Framework-Version von System.Net.Http
In meinem Projekt funktioniert.
Wie bereits debattiert, ist diese Methode seit .NET 4.5.2 nicht mehr verfügbar. Zum Erweitern von Jeroen Ks Antwort können Sie eine Erweiterungsmethode erstellen:
public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model)
{
var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(model);
var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
return await client.PostAsync(requestUrl, stringContent);
}
Jetzt können Sie client.PostAsJsonAsync("api/AgentCollection", user)
aufrufen.
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, entfernte ich den fehlerhaften Verweis und installierte dann mit NuGet die neueste Version von Microsoft.AspNet.WebApi.Client
.
Ich weiß, dass diese Antwort zu spät ist, ich hatte das gleiche Problem und habe das Nuget System.Net.Http.Formatting.Extension
Hinzugefügt, nachdem ich hier und da überprüft habe, dass das Nuget hinzugefügt wurde, aber das System.Net.Http.Formatting.dll
Nicht hinzugefügt wurde den referenzen nach habe ich gerade das nuget neu installiert
Anstatt diese Menge an Code zu schreiben, um einen einfachen Anruf zu tätigen, können Sie einen der Wrapper verwenden, die über das Internet verfügbar sind.
Ich habe einen WebApiClient geschrieben, der bei NuGet erhältlich ist ... check it out!
https://www.nuget.org/packages/WebApiRestService.WebApiClient/
Versuchen Sie, in Ihrem Projekt das NuGet-Paket zu installieren: Microsoft.AspNet.WebApi.Client:
Install-Package Microsoft.AspNet.WebApi.Client