Ich verwende ASP.NET Core. Ich möchte verwenden, habe HttpClient
aber festgestellt, dass zwei NuGet-Pakete angeboten werden. Welches benutze ich?
Ich verwende ASP.NET Core. Ich möchte verwenden, habe HttpClient
aber festgestellt, dass zwei NuGet-Pakete angeboten werden. Welches benutze ich?
Antworten:
Kommt auf die Version an. Die alten System.Net.Http
Pakete (die 2.0 ) sind Legacy-Pakete, die Microsoft.Http.Net
gemäß der Beschreibung zugunsten von veraltet sind :
Das Legacy-Paket System.Net.Http ist jetzt im Paket 'Microsoft.Net.Http' enthalten.
Sie sind vorhanden, um die HttpClient
in früheren .NET-Versionen und Portable Class-Bibliotheken bereitgestellten Bibliotheken bereitzustellen . Sie sollten Microsoft.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 festlegen netstandard2.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:
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
<!-- // HttpClient for full .NET -->
<Reference Include="System.Net.Http" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
<!-- // HttpClient for .NET Core -->
<PackageReference Include="System.Net.Http" Version="4.3.3" />
</ItemGroup>
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 dem frameworkAssemblies
Element hinzufügen . Beispielsweise:
"frameworks": {
"net451": {
"frameworkAssemblies": {
"System.Net.Http": "4.0.0.0" // HttpClient for full .NET
}
},
"netstandard1.3": {
"dependencies": {
"System.Net.Http": "4.1.0", // HttpClient for .NET Core
}
}
}
System.Net.Http
das jetzt im Microsoft.Net.Http
Paket enthalten ist" nicht. Sprache, auf die Sie sich in der Paketbeschreibung beziehen. Tatsächlich System.Net.Http
scheint das Paket zuletzt (um einige Jahre) aktualisiert worden zu sein
Fü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. "
Microsoft.Net.Http
erfordert zusätzliche Microsoft.Bcl
Abhängigkeiten.
Wenn Sie nur auf .NET Framework oder .NET Core abzielen, System.Net.Http
ist dies eine gute Wahl. Andernfalls Microsoft.Net.Http
wäre die bessere Wahl, da es die nächste Generation sein könnte.
System.Net.Http
davon abhängtMicrosoft.Net.Http
. Andererseits hängt es davon ab, was Sie mit Ihrer Anwendung versuchen.