मैं ASP.NET कोर का उपयोग कर रहा हूं। मैं उपयोग करना चाहता हूं HttpClient
लेकिन मैंने देखा कि दो NuGet पैकेज दिए जा रहे हैं। मैं किसका उपयोग करूं?
मैं ASP.NET कोर का उपयोग कर रहा हूं। मैं उपयोग करना चाहता हूं HttpClient
लेकिन मैंने देखा कि दो NuGet पैकेज दिए जा रहे हैं। मैं किसका उपयोग करूं?
जवाबों:
संस्करण पर निर्भर करता है। पुराने System.Net.Http
पैकेज ( 2.0 वाले) विरासत पैकेज हैं जो Microsoft.Http.Net
विवरण के अनुसार हटाए गए हैं :
विरासत पैकेज, System.Net.Http अब 'Microsoft.Net.Http' पैकेज में शामिल है।
वे HttpClient
पिछले .NET संस्करणों और पोर्टेबल क्लास पुस्तकालयों में प्रदान करने के लिए मौजूद हैं। आपको Microsoft.Net.Http
उस स्थिति में उपयोग करना चाहिए ।
जब से आप .NET कोर का उपयोग कर रहे हैं, आपको नवीनतम System.Net.Http
पैकेज (उदाहरण। 4.3.3) का उपयोग करना चाहिए ।
Csproj के लिए अद्यतन किया गया
.NET मानक 2.0 के अनुसार, System.Net.HttpClient
जब आप लक्ष्य बनाते हैं तो पैकेज पहले से ही शामिल होता है और उपलब्ध होता है netstandard2.0
। यदि, किसी कारण से, आप अभी भी इसे पूर्ण .NET और .NET कोर दोनों के लिए संदर्भित करना चाहते हैं, तो आप इसे अपनी 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 का उपयोग कर रहे हैं
यदि आपका प्रोजेक्ट। Json पूर्ण .NET और .NET कोर दोनों को लक्षित करता है, तो आपको 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 पर प्रोग्राम मैनेजर) ने इस बारे में ट्वीट किया :
"HttpClient एक NuGet पैकेज (आउट-ऑफ-बैंड) के रूप में शुरू हुआ था और इसे .NET फ्रेमवर्क में 4.5 के साथ-साथ (इन-बॉक्स) में जोड़ा गया था।
.NET कोर / .NET मानक के साथ, हमने मूल रूप से .NET प्लेटफ़ॉर्म को पैकेज के एक सेट के रूप में मॉडल करने की कोशिश की, जहाँ इन-बॉक्स बनाम आउट-ऑफ-बैंड अब मायने नहीं रखते। हालाँकि, यह गड़बड़ और अधिक जटिल था जितना हमने अनुमान लगाया था।
नतीजतन, हमने कोर / स्टैंडर्ड 2.0 के साथ नूगेट ग्राफ के रूप में .NET प्लेटफॉर्म को मॉडलिंग करने का विचार छोड़ दिया।
सामान्य उत्तर है:
.NET कोर 2.0 और .NET मानक 2.0 के साथ आपको बिल्कुल SystemNetHttpClient NuGet पैकेज को संदर्भित करने की आवश्यकता नहीं होनी चाहिए। हालांकि यह 1.x निर्भरता से खींचा जा सकता है।
वही .NET फ्रेमवर्क के लिए जाता है: यदि आप 4.5 और ऊपर लक्ष्य करते हैं, तो आपको आमतौर पर NuGet पैकेज के बजाय इन-बॉक्स संस्करण का उपयोग करना चाहिए। फिर, आप इसे .NET मानक 1.x और PCL निर्भरता के लिए खींच सकते हैं, लेकिन .NET Framework के विरुद्ध सीधे लिखे गए कोड का उपयोग नहीं करना चाहिए।
तो क्यों पैकेज अभी भी मौजूद है / हम अभी भी इसे अपडेट क्यों करते हैं? केवल इसलिए कि हम मौजूदा कोड का काम करना चाहते हैं जिसने उस पर निर्भरता ले ली है। हालाँकि, जैसा कि आपने पाया कि .NET फ्रेमवर्क पर आसानी से सेलिंग नहीं है।
विरासत पैकेज का इरादा मॉडल है: यदि आप .NET फ्रेमवर्क 4.5+, .NET कोर 2+, .NET मानक 2+ से पैकेज का उपभोग करते हैं, तो पैकेज केवल प्लेटफॉर्म को आगे की ओर लागू करता है, बशर्ते कि इसका अपना संस्करण लाने का विरोध हो।
हालांकि सभी मामलों में वास्तव में ऐसा नहीं होता है: HTTP ग्राहक पैकेज (आंशिक रूप से) .NET फ्रेमवर्क पर इन-बॉक्स घटकों को प्रतिस्थापित करता है जो कुछ ग्राहकों के लिए काम करते हैं और दूसरों के लिए विफल होते हैं। इस प्रकार, अब हम आसानी से समस्या को ठीक नहीं कर सकते।
उसके ऊपर हमारे पास .NET फ्रेमवर्क के साथ सामान्य बाइंडिंग समस्याएँ हैं, इसलिए यदि आप बाइंडिंग पुनर्निर्देशन जोड़ते हैं तो यह वास्तव में अच्छी तरह से काम करता है। वाह!
इसलिए, एक पुस्तकालय लेखक के रूप में मेरी सिफारिश है कि इस पैकेज पर निर्भरता लेने से बचें और .NET फ्रेमवर्क 4.5, .NET कोर 2.0 और .NET स्टैंडर्ड 2.0 में इन-बॉक्स संस्करणों को प्राथमिकता दें। "
Microsoft.Net.Http
अतिरिक्त Microsoft.Bcl
निर्भरता की आवश्यकता है।
उसके लिए, यदि आप केवल .NET फ्रेमवर्क या .NET कोर को लक्षित करते हैं, तो System.Net.Http
जाना अच्छा है। अन्यथा, Microsoft.Net.Http
बेहतर विकल्प होगा क्योंकि यह अगली पीढ़ी हो सकती है।
System.Net.Http
पर निर्भर करता हैMicrosoft.Net.Http
। लेकिन फिर, यह इस बात पर निर्भर करता है कि आप अपने आवेदन के साथ क्या करने की कोशिश कर रहे हैं।