Saya menggunakan ASP.NET Core. Saya ingin menggunakan HttpClient
tapi saya perhatikan ada dua paket NuGet yang ditawarkan. Yang mana yang saya gunakan?
Saya menggunakan ASP.NET Core. Saya ingin menggunakan HttpClient
tapi saya perhatikan ada dua paket NuGet yang ditawarkan. Yang mana yang saya gunakan?
Jawaban:
Tergantung versinya. Paket- System.Net.Http
paket lama (yang 2.0 ) adalah paket lama yang tidak digunakan lagi Microsoft.Http.Net
sesuai dengan deskripsi:
Paket lawas, System.Net.Http sekarang disertakan dalam paket 'Microsoft.Net.Http'.
Mereka ada untuk menyediakan HttpClient
di versi .NET sebelumnya dan perpustakaan Kelas Portabel. Anda harus menggunakan Microsoft.Net.Http
dalam kasus itu.
Karena Anda menggunakan .NET Core, Anda harus menggunakan System.Net.Http
paket terbaru (mis. 4.3.3).
Diperbarui untuk csproj
Mulai .NET Standard 2.0, System.Net.HttpClient
paket sudah disertakan dan tersedia saat Anda menargetkan netstandard2.0
. Jika, karena alasan tertentu, Anda masih ingin mereferensikannya untuk .NET penuh dan .NET Core, Anda dapat menambahkan ini ke file csproj Anda:
<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>
Jika Anda menggunakan project.json
Jika project.json Anda menargetkan penuh .NET dan .NET Core, Anda harus menambahkan System.Net.Http
rakitan ke frameworkAssemblies
elemen. Sebagai contoh:
"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
sekarang disertakan dalam Microsoft.Net.Http
paket." bahasa yang Anda maksud di deskripsi paket. Faktanya, System.Net.Http
paket tersebut tampaknya paling baru diperbarui (beberapa tahun)
Bagi siapa pun yang tertarik dengan latar belakang lebih lanjut tentang ini, Immo Landwerth (Manajer program di .NET di Microsoft) tweet tentang ini:
"HttpClient dimulai sebagai paket NuGet (out-of-band) dan ditambahkan ke .NET Framework 4.5 juga (in-box).
Dengan .NET Core / .NET Standard kami awalnya mencoba untuk memodelkan platform .NET sebagai satu set paket di mana in-box vs. out-of-band tidak lagi penting. Namun, ini lebih berantakan dan lebih rumit dari yang kami perkirakan.
Akibatnya, kami mengabaikan sebagian besar ide pemodelan platform .NET sebagai grafik NuGet dengan Core / Standard 2.0.
Jawaban umumnya adalah:
Dengan .NET Core 2.0 dan .NET Standard 2.0 Anda tidak perlu mereferensikan paket SystemNetHttpClient NuGet sama sekali. Ini mungkin ditarik dari dependensi 1.x.
Hal yang sama berlaku untuk .NET Framework: jika Anda menargetkan 4.5 dan yang lebih baru, Anda biasanya harus menggunakan versi dalam kotak daripada paket NuGet. Sekali lagi, Anda mungkin akan menariknya untuk dependensi .NET Standard 1.x dan PCL, tetapi kode yang ditulis langsung terhadap .NET Framework tidak boleh menggunakannya.
Jadi kenapa paketnya masih ada / kenapa kita masih update? Hanya karena kami ingin membuat kode yang ada berfungsi yang membutuhkan ketergantungan padanya. Namun, karena Anda menemukan itu tidak lancar di .NET Framework.
Model yang dimaksudkan untuk paket lawas adalah: jika Anda menggunakan paket dari .NET Framework 4.5+, .NET Core 2+, .NET Standard 2+ paket hanya meneruskan ke platform yang disediakan implementasi sebagai lawan membawa versinya sendiri.
Bukan itu yang sebenarnya terjadi dalam semua kasus: paket Klien HTTP akan (sebagian) menggantikan komponen dalam kotak pada .NET Framework yang kebetulan berfungsi untuk beberapa pelanggan dan gagal untuk yang lain. Karenanya, kami tidak dapat dengan mudah memperbaiki masalah tersebut sekarang.
Selain itu, kami memiliki masalah pengikatan yang biasa dengan .NET Framework jadi ini hanya benar-benar berfungsi dengan baik jika Anda menambahkan pengalihan pengikatan. Yay!
Jadi, sebagai penulis perpustakaan, rekomendasi saya adalah menghindari ketergantungan pada paket ini dan lebih memilih versi dalam kotak di .NETFramework 4.5, .NETCore 2.0, dan .NETStandar 2.0. "
Microsoft.Net.Http
membutuhkan Microsoft.Bcl
ketergantungan tambahan .
Untuk itu, jika Anda hanya menargetkan .NET Framework atau .NET Core, System.Net.Http
ada baiknya. Jika tidak, Microsoft.Net.Http
akan menjadi pilihan yang lebih baik karena bisa menjadi generasi berikutnya.
System.Net.Http
tergantungMicrosoft.Net.Http
. Tapi sekali lagi, itu tergantung pada apa yang Anda coba lakukan dengan aplikasi Anda.