wake-up-neo.com

HttpClient unterstützt nicht die PostAsJsonAsync-Methode C #

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.

212
Jidheesh Rajan

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.

367
Justin Harvey

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

160
Jeroen K

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.

156
Todd H.

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.

31

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.

10
Mr Giggles

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

3
Abed Kaff

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/

1
Andreo Romera

Versuchen Sie, in Ihrem Projekt das NuGet-Paket zu installieren: Microsoft.AspNet.WebApi.Client:

Install-Package Microsoft.AspNet.WebApi.Client