Я использую ASP.NET Core. Я хочу использовать, HttpClient
но заметил, что предлагается два пакета NuGet. Какой я использую?
c#
asp.net-core
nuget
asp.net-core-mvc
httpclient
Мухаммад Рехан Саид
источник
источник
System.Net.Http
зависит отMicrosoft.Net.Http
. Но опять же, это зависит от того, что вы пытаетесь сделать со своим приложением.Ответы:
Зависит от версии. Старые
System.Net.Http
пакеты (версии 2.0 ) являются устаревшими пакетами, которые устарели вMicrosoft.Http.Net
соответствии с описанием:Они существуют для предоставления
HttpClient
библиотек предыдущих версий .NET и переносимых классов. Вы должны использоватьMicrosoft.Net.Http
в этом случае.Поскольку вы используете .NET Core, вам следует использовать последний
System.Net.Http
пакет (например, 4.3.3).Обновлено для csproj
Начиная с .NET Standard 2.0,
System.Net.HttpClient
пакет уже включен и доступен при настройкеnetstandard2.0
. Если по какой-то причине вы все еще хотите ссылаться на него как для полной версии .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>
Если вы используете project.json
Если ваш project.json нацелен как на полную версию .NET, так и на .NET Core, вам необходимо добавить
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 } } }
источник
System.Net.Http
теперь включен вMicrosoft.Net.Http
пакет». язык, на который вы ссылаетесь в описании пакета. Фактически,System.Net.Http
пакет, похоже, был самым последним обновленным (за несколько лет)Для всех, кто интересуется более подробной информацией об этом, Иммо Ландверт (менеджер программ по .NET в Microsoft) написал об этом в Твиттере :
«HttpClient начинался как пакет NuGet (внеполосный) и также был добавлен в .NET Framework в версии 4.5 (в комплекте).
С помощью .NET Core / .NET Standard мы изначально пытались смоделировать платформу .NET как набор пакетов, для которых внутреннее и внешнее использование уже не имело значения. Однако все оказалось сложнее и сложнее, чем мы ожидали.
В результате мы в значительной степени отказались от идеи моделирования платформы .NET в виде графа NuGet с помощью Core / Standard 2.0.
Общий ответ:
С .NET Core 2.0 и .NET Standard 2.0 вам вообще не нужно ссылаться на пакет SystemNetHttpClient NuGet. Однако он может быть извлечен из зависимостей 1.x.
То же самое и с .NET Framework: если вы нацеливаетесь на 4.5 и выше, вам обычно следует использовать встроенную версию вместо пакета NuGet. Опять же, вы можете использовать его для зависимостей .NET Standard 1.x и PCL, но код, написанный непосредственно для .NET Framework, не должен его использовать.
Так почему пакет все еще существует / почему мы все еще обновляем его? Просто потому, что мы хотим заставить существующий код работать, который зависел от него. Однако, как вы обнаружили, в .NET Framework это не так гладко.
Предполагаемая модель для устаревшего пакета: если вы используете пакет из .NET Framework 4.5+, .NET Core 2+, .NET Standard 2+, пакет пересылается только на реализацию, предоставленную платформой, а не для создания собственной версии.
Однако это не то, что на самом деле происходит во всех случаях: пакет HTTP-клиента (частично) заменяет входящие в комплект компоненты на .NET Framework, которые работают у одних клиентов и не работают у других. Таким образом, сейчас мы не можем легко решить проблему.
Вдобавок к этому у нас есть обычные проблемы с привязкой к .NET Framework, поэтому это действительно хорошо работает, только если вы добавляете перенаправления привязки. Ура!
Поэтому, как автор библиотеки, я рекомендую избегать зависимости от этого пакета и отдавать предпочтение встроенным версиям .NET Framework 4.5, .NET Core 2.0 и .NET Standard 2.0 ».
https://twitter.com/terrajobst/status/997262020108926976
источник
Microsoft.Net.Http
требует дополнительныхMicrosoft.Bcl
зависимостей.Для этого, если вы нацелены только на .NET Framework или .NET Core,
System.Net.Http
это хорошо. В противном случае этоMicrosoft.Net.Http
был бы лучший выбор, поскольку это могло быть следующее поколение.источник