Saya menggunakan ASP.NET Core. Saya ingin menggunakan HttpClient
tapi saya perhatikan ada dua paket NuGet yang ditawarkan. Yang mana yang saya gunakan?
c#
asp.net-core
nuget
asp.net-core-mvc
httpclient
Muhammad Rehan Saeed
sumber
sumber
System.Net.Http
tergantungMicrosoft.Net.Http
. Tapi sekali lagi, itu tergantung pada apa yang Anda coba lakukan dengan aplikasi Anda.Jawaban:
Tergantung versinya. Paket-
System.Net.Http
paket lama (yang 2.0 ) adalah paket lama yang tidak digunakan lagiMicrosoft.Http.Net
sesuai dengan deskripsi:Mereka ada untuk menyediakan
HttpClient
di versi .NET sebelumnya dan perpustakaan Kelas Portabel. Anda harus menggunakanMicrosoft.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 menargetkannetstandard2.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 keframeworkAssemblies
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 } } }
sumber
System.Net.Http
sekarang disertakan dalamMicrosoft.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. "
https://twitter.com/terrajobst/status/997262020108926976
sumber
Microsoft.Net.Http
membutuhkanMicrosoft.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.sumber