Системы.Чистая.HTTP или Майкрософт.Чистая.Протокол HTTP
Я использую ASP.NET ядро. Я хочу использовать HttpClient
но я заметил, что есть два пакета NuGet предлагаются. Какой из них я использую?
3 ответа:
зависит от версии. Старый
System.Net.Http
пакеты (the 2.0 ones) - это устаревшие пакеты, которые устарели в пользуMicrosoft.Http.Net
по описанию:устаревший пакет, System. Net. Http теперь включен в Пакет' Microsoft.Net.Http'.
они существуют, чтобы обеспечить
HttpClient
в предыдущих версиях .NET и переносимых библиотеках классов. Вы должны использоватьMicrosoft.Net.Http
в этом случай.так как вы используете .NET Core, вы должны использовать последнюю версию
System.Net.Http
пакета (например. 4.3.3).обновлено для csproj файл
по состоянию на .Чистая стандарта 2.0, в
System.Net.HttpClient
пакет уже включен и доступен, когда вы нацеленыnetstandard2.0
. Если по какой-то причине вы все еще хотите ссылаться на него как для full .NET, так и для .NET Core, вы можете добавить это в свой файл 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>
если вы используете проект.json
если ваш проект.цели в JSON как полный .NET и .Чистая ядра, вам нужно добавить
System.Net.Http
собранияframeworkAssemblies
элемент. Например:"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 } } }
Microsoft.Net.Http
требуются дополнительныеMicrosoft.Bcl
зависимостей.для этого, если вы только целевой .NET Framework или .NET Core,
System.Net.Http
хорошо идти. В противном случае,Microsoft.Net.Http
было бы лучшим выбором, поскольку это может быть следующее поколение.
для тех, кто заинтересован в более подробной информации по этой Immo Landwerth (менеджер программ на .NET в Microsoft)твиттере это:
"HttpClient начинался как пакет NuGet (out-of-band) и был добавлен в .NET Framework также в 4.5 (in-box).
с .NET Core / .NET Standard мы первоначально пытались моделировать платформу .NET как набор пакетов, где быть в коробке против внеполосного больше не имело значения. Тем не менее, это было грязнее и сложнее, чем мы предполагали.
в результате мы в значительной степени отказались от идеи моделирования платформы .NET как графа NuGet с Core/Standard 2.0.
общий ответ:
с .NET Core 2.0 и .NET Standard 2.0 вам не нужно ссылаться на пакет SystemNetHttpClient NuGet вообще. Он может быть вытащен из 1.х хотя зависимостей.
то же самое касается .NET Framework: если вы нацелены на 4.5 и выше, вы должны обычно использовать версия in-box вместо пакета NuGet. Опять же, вы можете в конечном итоге вытащить его для .NET Standard 1.зависимости x и PCL, но код, написанный непосредственно против .NET Framework, не должен его использовать.
Итак, почему пакет все еще существует/почему мы все еще обновляем его? Просто потому, что мы хотим, чтобы существующий код работал, который взял зависимость от него. Однако, как вы обнаружили, это не плавное плавание на .NET Framework.
предполагаемая модель для устаревшего пакета: если вы потребляете пакет из .NET Framework 4.5+, .NET Core 2+, .NET Standard 2 + пакет только пересылается на платформу, предоставленную реализацией, а не приносит свою собственную версию.
Это не то, что на самом деле происходит во всех случаях: пакет клиента HTTP будет (частично) заменять компоненты in-box на .NET Framework, которые работают для некоторых клиентов и не работают для других. Таким образом, мы не можем легко решить эту проблему сейчас.
кроме того, у нас есть обычный проблемы привязки с .NET Framework, поэтому это действительно работает только при добавлении перенаправления привязки. Ура!
Итак, как автор библиотеки Моя рекомендация заключается в том, чтобы избежать зависимости от этого пакета и предпочесть встроенные версии в .NET Framework 4.5, .NET Core 2.0 и .NET Standard 2.0."