Ich habe eine Konsolen-App erstellt, um eine soeben erstellte Web-API zu verwenden. Der Konsolen-App-Code wird nicht kompiliert. Es gibt mir den Kompilierungsfehler:
'System.Net.Http.HttpContent' does not contain a definition for
'ReadAsAsync' and no extension method 'ReadAsAsync' accepting a
first argument of type 'System.Net.Http.HttpContent' could be
found (are you missing a using directive or an assembly reference?)
Hier ist eine Testmethode, bei der dieser Fehler auftritt.
static IEnumerable<Foo> GetAllFoos()
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("appkey", "myapp_key");
var response = client.GetAsync("http://localhost:57163/api/foo").Result;
if (response.IsSuccessStatusCode)
return response.Content.ReadAsAsync<IEnumerable<Foo>>().Result.ToList();
}
return null;
}
Ich habe diese Methode verwendet und von einem MVC-Client verwendet.
asp.net
.net
asp.net-mvc
asp.net-web-api
Wasserkühler v2
quelle
quelle
Stellen Sie sicher, dass Sie Folgendes
correct NuGet package
in Ihrer Konsolenanwendung installiert haben :und dass Sie mindestens .NET 4.0 als Ziel haben.
Abgesehen davon ist Ihre
GetAllFoos
Funktion so definiert, dass sie eineIEnumerable<Prospect>
zurückgibt, während Sie in IhrerReadAsAsync
Methode übergeben,IEnumerable<Foo>
die offensichtlich keine kompatiblen Typen sind.Install-Package Microsoft.AspNet.WebApi.Client
quelle
Microsoft.AspNet.WebApi.Client
NuGet installieren . Dadurch wird die neueste Version aus dem Internet heruntergeladen und auf die Assembly in Ihrer Konsolenanwendung verwiesen. Genau das macht die ASP.NET MVC-Projektvorlage und ist der Grund, warum Sie nichts installieren müssen, damit es funktioniert. Aber in Ihrer Konsolenanwendung gibt es so etwas nicht.Install-Package Microsoft.AspNet.WebApi.Client
den Code ein und probieren Sie ihn aus.Versuche dies Manager - Paket console
Install-Package System.Net.Http.Formatting.Extension -Version 5.2.3 und fügen Sie dann durch Add Referenz.
quelle
Das Hinzufügen eines Verweises auf System.Net.Http.Formatting.dll kann zu Problemen mit der DLL-Nichtübereinstimmung führen. Derzeit scheint System.Net.Http.Formatting.dll auf Version 4.5.0.0 von Newtonsoft.Json.DLL zu verweisen, während die neueste Version 6.0.0.0 ist. Das bedeutet, dass Sie auch eine Bindungsumleitung hinzufügen müssen, um eine .NET Assembly-Ausnahme zu vermeiden, wenn Sie auf das neueste Newtonsoft NuGet-Paket oder die neueste DLL verweisen:
Eine alternative Lösung zum Hinzufügen eines Verweises auf System.Net.Http.Formatting.dll besteht darin, die Antwort als Zeichenfolge zu lesen und sich dann mit JsonConvert.DeserializeObject (responseAsString) zu desearalisieren. Die vollständige Methode wäre:
quelle
Wenn Sie über VS 2012 verfügen, können Sie die Paketmanagerkonsole aufrufen und Install-Package Microsoft.AspNet.WebApi.Client eingeben
Dies würde die neueste Version des Pakets herunterladen
quelle
Verwenden Sie diese Assembly-Referenz in Ihrem Projekt
quelle