Системы.Чистая.HTTP или Майкрософт.Чистая.Протокол HTTP


Я использую ASP.NET ядро. Я хочу использовать HttpClient но я заметил, что есть два пакета NuGet предлагаются. Какой из них я использую?

3 60

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."

https://twitter.com/terrajobst/status/997262020108926976