Я використовую ASP.NET Core. Я хочу використовувати, HttpClient
але я помітив, що пропонуються два пакети NuGet. Який я використовую?
Я використовую ASP.NET Core. Я хочу використовувати, HttpClient
але я помітив, що пропонуються два пакети NuGet. Який я використовую?
Відповіді:
Залежить від версії. Старі System.Net.Http
пакети (пакети 2.0 ) є застарілими пакетами, які припинено на користь Microsoft.Http.Net
відповідно до опису:
Старий пакет System.Net.Http тепер включений до пакета Microsoft.Net.Http.
Вони існують для забезпечення 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 ".
Microsoft.Net.Http
вимагає додаткових Microsoft.Bcl
залежностей.
Для цього, якщо ви націлені лише на .NET Framework або .NET Core, System.Net.Http
добре піти. Інакше Microsoft.Net.Http
буде кращим вибором, оскільки це може бути наступне покоління.
System.Net.Http
залежить відMicrosoft.Net.Http
. Але знову ж таки, це залежить від того, що ви намагаєтесь зробити із вашим додатком.