Używam ASP.NET Core. Chcę użyć HttpClient
, ale zauważyłem, że są oferowane dwa pakiety NuGet. Którego używam?System.Net.Http vs Microsoft.Net.Http
Odpowiedz
zależy od wersji. Stare System.Net.Http
pakiety (te 2.0 nich) są starsze pakiety, które są przestarzałe na rzecz Microsoft.Http.Net
zgodnie z opisem:
pakiecie Legacy, System.Net.Http jest obecnie zawarte w „Microsoft.Net.Http "pakiet.
Istnieją one w celu zapewnienia HttpClient
w poprzednich wersjach .NET i bibliotekach przenośnych. W takim przypadku powinieneś użyć Microsoft.Net.Http
.
Ponieważ używasz .NET Core należy użyć najnowszej System.Net.Http
pakiet (np. 4.3.3).
Aktualizacja dla csproj
Jako standard .NET 2.0, pakiet System.Net.HttpClient
jest już włączone i dostępne w przypadku kierowania netstandard2.0
. Jeśli z jakiegoś powodu nadal chcesz odwoływać zarówno dla pełnego .NET i .NET Rdzenia można dodać do pliku csproj:
<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>
Jeśli używasz project.json
Jeśli twoje cele project.json zarówno pełne .NET i .NET Core, trzeba dodać zespół System.Net.Http
do elementu frameworkAssemblies
. Na przykład:
"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
}
}
}
Należy pamiętać, że nie mają dokładnie takiego samego zachowania. Pełna wersja .NET (4.0.0.0) nie wykonuje automatycznej kompresji, natomiast wersja .NET Core (4.1.0). Więc jeśli używasz pełnej wersji .NET, musisz ręcznie skonfigurować program obsługi, aby używał kompresji gzip/deflate. Opis: https://github.com/dotnet/docs/issues/1054 –
Ta odpowiedź podsumowuje, jaki bałagan stał się z .NET Core, .NET Standard i .NET Framework. – Vincent
@vincent To nie jest bolesny tyłek, gdy ludzie używają mono itp. Platforma multi zawsze ma kilka punktów bólu. – rolls
Microsoft.Net.Http
wymaga dodatkowych Microsoft.Bcl
zależności.
W tym przypadku, jeśli jesteś ukierunkowany tylko na .NET Framework lub .NET Core, dobrze jest przejść na System.Net.Http
. W przeciwnym razie lepszym wyborem byłby numer Microsoft.Net.Http
, ponieważ może to być kolejne pokolenie.
Wygląda na to, że MS zmieniło zdanie, ponieważ ten post nawiązuje do ... https: //stackoverflow.com/questions/39016373/the-current-status-of-system-net-http-vs-microsoft-net-http microsoft .net.http nie był aktualizowany od 2015 roku, podczas gdy system.net.http to tylko kilka miesięcy sago (nuget). – smoore4
Wygląda 'System.Net.Http' zależy' Microsoft.Net.Http'. Ale znowu to zależy od tego, co próbujesz zrobić ze swoją aplikacją. –