Ich verwende ASP.NET Core. Ich möchte verwenden, habe HttpClient
aber festgestellt, dass zwei NuGet-Pakete angeboten werden. Welches benutze ich?
c#
asp.net-core
nuget
asp.net-core-mvc
httpclient
Muhammad Rehan Saeed
quelle
quelle
System.Net.Http
davon abhängtMicrosoft.Net.Http
. Andererseits hängt es davon ab, was Sie mit Ihrer Anwendung versuchen.Antworten:
Kommt auf die Version an. Die alten
System.Net.Http
Pakete (die 2.0 ) sind Legacy-Pakete, dieMicrosoft.Http.Net
gemäß der Beschreibung zugunsten von veraltet sind :Sie sind vorhanden, um die
HttpClient
in früheren .NET-Versionen und Portable Class-Bibliotheken bereitgestellten Bibliotheken bereitzustellen . Sie solltenMicrosoft.Net.Http
in diesem Fall verwenden.Da Sie .NET Core verwenden, sollten Sie das neueste
System.Net.Http
Paket verwenden (z. B. 4.3.3).Aktualisiert für csproj
Ab .NET Standard 2.0 ist das
System.Net.HttpClient
Paket bereits enthalten und verfügbar, wenn Sie ein Ziel festlegennetstandard2.0
. Wenn Sie aus irgendeinem Grund weiterhin auf Full .NET und .NET Core verweisen möchten, können Sie dies zu Ihrer csproj-Datei hinzufügen:Wenn Sie project.json verwenden
Wenn Ihre project.json sowohl auf .NET als auch auf .NET Core abzielt, müssen Sie die
System.Net.Http
Assembly demframeworkAssemblies
Element hinzufügen . Beispielsweise:quelle
System.Net.Http
das jetzt imMicrosoft.Net.Http
Paket enthalten ist" nicht. Sprache, auf die Sie sich in der Paketbeschreibung beziehen. TatsächlichSystem.Net.Http
scheint das Paket zuletzt (um einige Jahre) aktualisiert worden zu seinFür alle, die mehr Hintergrundinformationen benötigen , hat Immo Landwerth (Programmmanager bei .NET bei Microsoft) darüber getwittert :
"HttpClient begann als NuGet-Paket (Out-of-Band) und wurde auch in 4.5 (Posteingang) zum .NET Framework hinzugefügt.
Mit .NET Core / .NET Standard haben wir ursprünglich versucht, die .NET-Plattform als eine Reihe von Paketen zu modellieren, bei denen es nicht mehr darauf ankam, Posteingang oder Out-of-Band zu sein. Dies war jedoch chaotischer und komplizierter als wir erwartet hatten.
Infolgedessen haben wir die Idee, die .NET-Plattform als NuGet-Diagramm mit Core / Standard 2.0 zu modellieren, weitgehend aufgegeben.
Die allgemeine Antwort lautet:
Mit .NET Core 2.0 und .NET Standard 2.0 sollten Sie überhaupt nicht auf das SystemNetHttpClient NuGet-Paket verweisen müssen. Es könnte jedoch aus 1.x-Abhängigkeiten gezogen werden.
Gleiches gilt für .NET Framework: Wenn Sie auf 4.5 und höher abzielen, sollten Sie im Allgemeinen die In-Box-Version anstelle des NuGet-Pakets verwenden. Auch hier kann es vorkommen, dass Sie es für .NET Standard 1.x- und PCL-Abhängigkeiten verwenden, aber Code, der direkt für .NET Framework geschrieben wurde, sollte es nicht verwenden.
Warum existiert das Paket noch / warum aktualisieren wir es noch? Einfach, weil wir vorhandenen Code funktionsfähig machen wollen, der davon abhängig ist. Wie Sie jedoch festgestellt haben, ist das Segeln in .NET Framework nicht reibungslos.
Das beabsichtigte Modell für das Legacy-Paket lautet: Wenn Sie das Paket aus .NET Framework 4.5+, .NET Core 2+, .NET Standard 2+ verwenden, wird das Paket nur an die von der Plattform bereitgestellte Implementierung weitergeleitet, anstatt eine eigene Version zu bringen.
Dies ist jedoch nicht in allen Fällen der Fall: Das HTTP-Client-Paket ersetzt (teilweise) Posteingangskomponenten in .NET Framework, die für einige Kunden funktionieren und für andere fehlschlagen. Daher können wir das Problem jetzt nicht einfach beheben.
Darüber hinaus haben wir die üblichen Bindungsprobleme mit .NET Framework, sodass dies nur dann wirklich gut funktioniert, wenn Sie Bindungsumleitungen hinzufügen. Yay!
Als Bibliotheksautor empfehle ich daher, eine Abhängigkeit von diesem Paket zu vermeiden und die In-Box-Versionen in .NET Framework 4.5, .NET Core 2.0 und .NET Standard 2.0 zu bevorzugen. "
https://twitter.com/terrajobst/status/997262020108926976
quelle
Microsoft.Net.Http
erfordert zusätzlicheMicrosoft.Bcl
Abhängigkeiten.Wenn Sie nur auf .NET Framework oder .NET Core abzielen,
System.Net.Http
ist dies eine gute Wahl. AndernfallsMicrosoft.Net.Http
wäre die bessere Wahl, da es die nächste Generation sein könnte.quelle