Saya menggunakan ASP.NET Core. Saya ingin menggunakan HttpClienttapi saya perhatikan ada dua paket NuGet yang ditawarkan. Yang mana yang saya gunakan?
Saya menggunakan ASP.NET Core. Saya ingin menggunakan HttpClienttapi saya perhatikan ada dua paket NuGet yang ditawarkan. Yang mana yang saya gunakan?
Jawaban:
Tergantung versinya. Paket- System.Net.Httppaket lama (yang 2.0 ) adalah paket lama yang tidak digunakan lagi Microsoft.Http.Netsesuai dengan deskripsi:
Paket lawas, System.Net.Http sekarang disertakan dalam paket 'Microsoft.Net.Http'.
Mereka ada untuk menyediakan HttpClientdi versi .NET sebelumnya dan perpustakaan Kelas Portabel. Anda harus menggunakan Microsoft.Net.Httpdalam kasus itu.
Karena Anda menggunakan .NET Core, Anda harus menggunakan System.Net.Httppaket terbaru (mis. 4.3.3).
Diperbarui untuk csproj
Mulai .NET Standard 2.0, System.Net.HttpClientpaket 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.Httprakitan ke frameworkAssemblieselemen. 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.Httpsekarang disertakan dalam Microsoft.Net.Httppaket." bahasa yang Anda maksud di deskripsi paket. Faktanya, System.Net.Httppaket 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.Httpmembutuhkan Microsoft.Bclketergantungan tambahan .
Untuk itu, jika Anda hanya menargetkan .NET Framework atau .NET Core, System.Net.Httpada baiknya. Jika tidak, Microsoft.Net.Httpakan menjadi pilihan yang lebih baik karena bisa menjadi generasi berikutnya.
System.Net.HttptergantungMicrosoft.Net.Http. Tapi sekali lagi, itu tergantung pada apa yang Anda coba lakukan dengan aplikasi Anda.