2015-06-25 6 views
56

मैं एएसपी.नेट कोर का उपयोग कर रहा हूं। मैं HttpClient का उपयोग करना चाहता हूं लेकिन मैंने देखा कि दो NuGet पैकेज पेश किए जा रहे हैं। मैं किस का उपयोग करता हूं?System.Net.Http बनाम माइक्रोसॉफ्ट.Net.Http

+0

ऐसा लगता है कि 'System.Net.Http'' Microsoft.Net.Http' पर निर्भर करता है। लेकिन फिर, यह इस बात पर निर्भर करता है कि आप अपने आवेदन के साथ क्या करने की कोशिश कर रहे हैं। –

उत्तर

44

संस्करण पर निर्भर करता है। वर्ष System.Net.Http पैकेज (2.0 वाले) विवरण के अनुसार विरासत संकुल जो Microsoft.Http.Net के पक्ष में पदावनत किया जाता है:

विरासत पैकेज, System.Net.Http अब 'में शामिल है Microsoft.Net.Http 'पैकेज।

वे पिछले .NET संस्करणों और पोर्टेबल क्लास पुस्तकालयों में HttpClient प्रदान करने के लिए मौजूद हैं। आपको उस मामले में Microsoft.Net.Http का उपयोग करना चाहिए।

चूंकि आप .NET कोर का उपयोग कर रहे हैं, तो आपको नवीनतम System.Net.Http पैकेज (उदाहरण 4.3.3) का उपयोग करना चाहिए।

csproj

के लिए अपडेट किया गया नेट स्टैंडर्ड 2.0 के रूप में, System.Net.HttpClient पैकेज पहले से ही शामिल है और उपलब्ध है जब आप netstandard2.0 को लक्षित कर रहा है। आप अपने csproj फ़ाइल को यह जोड़ सकते हैं किसी कारण से आप अभी भी दोनों पूर्ण नेट और .NET कोर के लिए इसे संदर्भ करना चाहते हैं:

<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

उपयोग कर रहे हैं

यदि आपका प्रोजेक्ट.जेसन पूर्ण .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 
    } 
    } 
} 
+1

ध्यान रखें कि उनके पास एक ही व्यवहार नहीं है। पूर्ण .NET संस्करण (4.0.0.0) स्वचालित संपीड़न नहीं करता है, जबकि .NET कोर संस्करण (4.1.0) करता है। तो यदि आप पूर्ण .NET संस्करण का उपयोग करते हैं तो आपको gzip/deflate संपीड़न का उपयोग करने के लिए मैन्युअल रूप से हैंडलर को कॉन्फ़िगर करना होगा। विवरण: https://github.com/dotnet/docs/issues/1054 –

+14

यह उत्तर बताता है कि यह .NET कोर, .NET मानक और .NET Framework के साथ क्या गड़बड़ है। – Vincent

+0

@ एविन्सेंट जब लोग मोनो आदि का इस्तेमाल करते हैं तो गधे में दर्द का कोई और दर्द नहीं होता है। मल्टी प्लेटफ़ॉर्म में हमेशा कुछ दर्द बिंदु होते हैं। – rolls

6

Microsoft.Net.Http अतिरिक्त Microsoft.Bcl निर्भरता की आवश्यकता है।

इसके लिए, यदि आप केवल लक्षित हैं .NET Framework या .NET Core, System.Net.Http जाने के लिए अच्छा है। अन्यथा, Microsoft.Net.Http बेहतर विकल्प होगा क्योंकि यह अगली पीढ़ी हो सकती है।

+5

लगता है कि एमएस ने अपने दिमाग को बदल दिया है क्योंकि इस पोस्ट के अनुसार ... https: //stackoverflow.com/questions/39016373/the-current-status-of-system-net-http-vs-microsoft-net-http microsoft .net.http 2015 से अद्यतन नहीं किया गया है, जबकि system.net.http बस कुछ महीने sago (nuget) है। – smoore4

संबंधित मुद्दे