'System.Net.Http.HttpContent' में 'ReadAsAsync' की परिभाषा नहीं है और न ही कोई विस्तार विधि है


97

मैंने अभी बनाया एक वेब एपीआई का उपभोग करने के लिए एक कंसोल ऐप बनाया। कंसोल ऐप कोड संकलित नहीं करता है। यह मुझे संकलन त्रुटि देता है:

'System.Net.Http.HttpContent' does not contain a definition for 
'ReadAsAsync' and no extension method 'ReadAsAsync' accepting a 
first argument of type 'System.Net.Http.HttpContent' could be 
found (are you missing a using directive or an assembly reference?)

यहाँ एक परीक्षण विधि है जिसमें यह त्रुटि होती है।

static IEnumerable<Foo> GetAllFoos()
{
  using (HttpClient client = new HttpClient())
  {
    client.DefaultRequestHeaders.Add("appkey", "myapp_key");

    var response = client.GetAsync("http://localhost:57163/api/foo").Result;

    if (response.IsSuccessStatusCode)
      return response.Content.ReadAsAsync<IEnumerable<Foo>>().Result.ToList();
  }

  return null;
}

मैंने इस विधि का उपयोग किया है और MVC क्लाइंट से इसका उपभोग किया है।

जवाबों:


140

लंबे संघर्ष के बाद मुझे इसका हल मिला।

समाधान: इसमें एक संदर्भ जोड़ें System.Net.Http.Formatting.dll। यह असेंबली C: \ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies फ़ोल्डर में भी उपलब्ध है ।

विधि ReadAsAsyncकक्षा में घोषित एक विस्तार विधि है HttpContentExtensions, जो System.Net.Httpपुस्तकालय में नाम स्थान पर है System.Net.Http.Formatting

बचावकर्मी आया बचाव!


7
स्व उत्तर जो दूसरों की मदद करते हैं उपनगरों को हिलाते हैं!
ग्रानैडकोडर

आपको वह फोल्डर कैसे मिला? मैंने वेब प्लेटफ़ॉर्म इंस्टॉलर का उपयोग किया है और यह प्रोग्राम फ़ाइलों में उस फ़ोल्डर को नहीं बनाता है।
ब्लेडफिस्ट

5
संदर्भ जोड़ें -> विधानसभाओं -> एक्सटेंशन। यदि यह सूचीबद्ध नहीं है, तो खोज असेंबली बॉक्स पर जाएँ और 'फ़ॉर्मेटिंग' टाइप करें। उम्मीद है कि यह आपके लिए आसान हो।
फ्रैंक 19

1
एक अद्यतन, मुझे यहाँ मिला: C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ पैकेज \ Microsoft.AspNet.WebApi.Client.4.0.30506.0 \ lib \ net40
पर्पलसर्फ सिप

6
nuget.org/packages/System.Net.Http.Formatting.Extension - इसका उपयोग न करने का कोई कारण?
वर्नरसीडी

93

सुनिश्चित करें कि आपने correct NuGet packageअपने कंसोल एप्लिकेशन में इंस्टॉल किया है:

<package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" />

और आप कम से कम .NET 4.0 को लक्षित कर रहे हैं।

यह कहा जा रहा है, आपके GetAllFoosकार्य को आपके द्वारा पारित किए जाने के समय IEnumerable<Prospect>में वापस करने के लिए परिभाषित किया गया है जो स्पष्ट रूप से संगत प्रकार नहीं हैं।ReadAsAsyncIEnumerable<Foo>

Install-Package Microsoft.AspNet.WebApi.Client

प्रोजेक्ट मैनेजर कंसोल में प्रोजेक्ट चुनें


धन्यवाद। यह एक पर्ची थी, जो व्यवसाय से संबंधित कोड को हटाने और इसे फोस के साथ बदलने के मेरे प्रयास से एक बाईं ओर थी।
वाटर कूलर v2

मुझे समझ नहीं आ रहा है। मैं पहले से ही अपने कंसोल ऐप गुणों में .NET 4.0 फ्रेमवर्क को लक्षित कर रहा हूं। क्या मुझे इस लाइब्रेरी Microsoft.AspNet.WebAPI.Client.dll का संदर्भ सेट करने की आवश्यकता है? मैंने ASP.NET MVC प्रोजेक्ट में ऐसा कोई संदर्भ नहीं दिया है जो मेरे वेब एपीआई का उपभोग करता हो और ठीक काम करता हो।
वाटर कूलर v2

5
आपको Microsoft.AspNet.WebApi.ClientNuGet इंस्टॉल करने की आवश्यकता है । यह इंटरनेट से नवीनतम संस्करण डाउनलोड करेगा और आपके कंसोल एप्लिकेशन में असेंबली का संदर्भ देगा। ठीक यही बात ASP.NET MVC प्रोजेक्ट टेम्प्लेट करती है और यही कारण है कि आपको इसके लिए कुछ भी स्थापित करने की आवश्यकता नहीं है। लेकिन आपके कंसोल एप्लिकेशन में ऐसी कोई बात नहीं है।
डारिन दिमित्रोव

1
धन्यवाद। मैंने वही किया जो आपने कहा था। मेरे समाधान में मेरी 12 परियोजनाएं हैं, लेकिन कुछ अजीब कारण से, मैंने लाइब्रेरी पैकेज मैनेजर कंसोल में 'इंस्टॉल-पैकेज Microsoft.AspNet.WebApi.Client' के बाद यह अपने सामान्य ट्रेस को प्रिंट किया और फिर कहा कि 'सफलतापूर्वक स्थापित किया गया Microsoft.AspNet .WebApi.Client in MyMVCProjectNameAndNotMyConsoleProjectName '। अगली बार मैंने अपने कंसोल प्रोजेक्ट को चुना और पैकेज मैनेजर कंसोल में उसी चीज़ को टाइप किया। इसने कहा कि MyMVCProjectName पहले से ही Microsoft.AspNet.WebApi.Client का संदर्भ देता है। मैं उलझन में हूं।
वाटर कूलर v2

हाँ मैं भी। सहूलियत बिना शुरू करना। नया कंसोल एप्लिकेशन, NuGet कंसोल खोलें, Install-Package Microsoft.AspNet.WebApi.Clientकोड टाइप करें और प्रयास करें।
डारिन दिमित्रोव

20
  • यदि आप कब से विधानसभा संदर्भ खोजने में असमर्थ हैं (संदर्भ पर राइट क्लिक करें -> आवश्यक विधानसभा जोड़ें)

पैकेज प्रबंधक कंसोल
स्थापित करने का प्रयास करें ।


2
मैं 2.2 से 3.1 तक डॉटनेटकोर एप्लिकेशन को माइग्रेट कर रहा था। नवीनतम और इस त्रुटि का सामना कर रहा हूं। मेरे ऐप में पहले से ही System.Net.Http.Formatting.Extension v5.2.3 का संदर्भ है, लेकिन मेरा ऐप इस त्रुटि की शिकायत करता है, इसलिए मैंने nuget.com Microsoft.AspNet.WebApi स्थापित किया .Cikin के रूप में Rikin और डारिन द्वारा सुझाव दिया और उसके बाद इस मुद्दे को हल किया है। धन्यवाद
अक्स

12

System.Net.Http.Formatting.dll के संदर्भ को जोड़ने से DLL बेमेल समस्याएँ हो सकती हैं। अभी, System.Net.Http.Formatting.dll संदर्भ संस्करण Newtonsoft.Json.DLL के 4.5.0.0 संस्करण में दिखाई देता है, जबकि नवीनतम संस्करण 6.0.0.0 है। इसका मतलब है कि यदि आपको नवीनतम न्यूटॉन्सॉफ्ट नुगेट पैकेज या डीएलएल का संदर्भ दिया जाए तो आपको .NET असेंबली अपवाद से बचने के लिए एक बाध्यकारी रीडायरेक्ट भी जोड़ना होगा:

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
 </dependentAssembly> 

तो System.Net.Http.Formatting.dll के संदर्भ को जोड़ने के लिए एक वैकल्पिक समाधान एक स्ट्रिंग के रूप में प्रतिक्रिया को पढ़ना है और फिर JsonConvert.DeserializeObject (responseAsString) के साथ खुद को समझा। पूर्ण विधि होगी:

public async Task<T> GetHttpResponseContentAsType(string baseUrl, string subUrl)
{
     using (var client = new HttpClient())
     {
         client.BaseAddress = new Uri(baseUrl);
         client.DefaultRequestHeaders.Accept.Clear();
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

         HttpResponseMessage response = await client.GetAsync(subUrl);
         response.EnsureSuccessStatusCode();
         var responseAsString = await response.Content.ReadAsStringAsync();
         var responseAsConcreteType = JsonConvert.DeserializeObject<T>(responseAsString);
         return responseAsConcreteType;
      }
}

9

या यदि आपके पास वी.एस.

यह पैकेज का नवीनतम संस्करण डाउनलोड करेगा


इसने मेरे लिए इसे ठीक कर दिया। - VS2013 का उपयोग करते हुए
Dan Rayson

अगर आपके पास पहले से ही Microsoft.AspNet.WebApi.Client पैकेज है, तो इसे स्थापित करने और स्थापित करने का प्रयास करें, कि v 5.2.3 के लिए मेरा मुद्दा तय हो गया
नवीन

-1

अपने प्रोजेक्ट में इस विधानसभा रेफरेंस का उपयोग करें

Add a reference to System.Net.Http.Formatting.dll

6
जनवरी 2013 से स्वीकृत उत्तर पहले से ही यह बताता है और अधिक जानकारी है। आपका उत्तर भी ठीक से प्रारूपित नहीं है।
user247702
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.