'System.Net.Http.HttpContent' তে 'ReadAsAsync' এর সংজ্ঞা নেই এবং কোনও এক্সটেনশন পদ্ধতি নেই


101

আমি সবে তৈরি একটি ওয়েব এপিআই ব্যবহার করার জন্য একটি কনসোল অ্যাপ তৈরি করেছি। কনসোল অ্যাপ কোডটি সংকলন করে না। এটি আমাকে সংকলন ত্রুটি দেয়:

'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;
}

আমি এই পদ্ধতিটি ব্যবহার করেছি এবং এটি এমভিসি ক্লায়েন্টের কাছ থেকে গ্রাস করেছি।

উত্তর:


142

দীর্ঘ লড়াইয়ের পরে সমাধানটি পেলাম।

সমাধান: একটি রেফারেন্স যুক্ত করুন System.Net.Http.Formatting.dll। এই সমাবেশটি সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এএসপি.নেট \ এএসপি.নেট এমভিসি 4 \ অ্যাসেমব্লিজ ফোল্ডারেও উপলব্ধ।

পদ্ধতিটি ReadAsAsyncক্লাসে ঘোষিত একটি এক্সটেনশন পদ্ধতি HttpContentExtensions, যা System.Net.Httpগ্রন্থাগারের নেমস্পেসে রয়েছে System.Net.Http.Formatting

রিফ্লেক্টর উদ্ধার করতে এসেছিলেন!


7
নিজের উত্তরগুলি যা অন্যদের শহরতলিকে রক করতে সহায়তা করে!
গ্রানাডা কোডার

আপনি কিভাবে এই ফোল্ডারটি পেলেন? আমি ওয়েব প্ল্যাটফর্ম ইনস্টলার ব্যবহার করেছি এবং এটি প্রোগ্রাম ফাইলে সেই ফোল্ডারটি তৈরি করতে পারেনি।
ব্লেডিস্ট

5
রেফারেন্স যুক্ত করুন -> সমাবেশগুলি -> এক্সটেনশনগুলি। যদি এটি তালিকাভুক্ত না হয় তবে অনুসন্ধান সমাবেশগুলিতে যান এবং 'ফর্ম্যাটিং' টাইপ করুন। আশা করি এটি আপনার পক্ষে সহজতর হবে।
ফ্র্যাঙ্কো

4
একটি আপডেট, আমি এখানে আমার খুঁজে পেয়েছি: সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ মাইক্রোসফ্ট এএসপি.নেট \ এএসপি.নেট এমভিসি 4 \ প্যাকেজগুলি \ মাইক্রোসফট.এএসপনেট.উইবএপিআই.ক্লিয়েন্ট.4.0.30506.0
b

7
nuget.org/packages/System.Net.Http. Formatting.Existance - কোনও কারণেই এটি ব্যবহার করবেন না?
ওয়ার্নারসিডি

96

নিশ্চিত হয়ে নিন যে আপনি correct NuGet packageনিজের কনসোল অ্যাপ্লিকেশনটি ইনস্টল করেছেন :

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

এবং আপনি কমপক্ষে .NET 4.0 লক্ষ্য করছেন।

এটি বলা হচ্ছে, আপনার GetAllFoosফাংশনটি এমনভাবে ফিরে আসার জন্য সংজ্ঞায়িত করা হয়েছে IEnumerable<Prospect>যখন আপনার ReadAsAsyncপদ্ধতিতে আপনি যাচ্ছেন IEnumerable<Foo>যা অবশ্যই স্পষ্টভাবে উপযুক্ত নয়।

Install-Package Microsoft.AspNet.WebApi.Client

প্রজেক্ট ম্যানেজার কনসোলে প্রকল্প নির্বাচন করুন


ধন্যবাদ এটি ছিল একটি স্লিপ, ব্যবসায়ের সাথে সম্পর্কিত কোড সরানোর এবং ফুসের সাথে এটি প্রতিস্থাপনের আমার প্রচেষ্টা থেকে একটি বাম।
ওয়াটার কুলার ভি 2

আমি বুঝতে পারছি না। আমি ইতিমধ্যে আমার কনসোল অ্যাপের বৈশিষ্ট্যগুলিতে .NET 4.0 কাঠামোটিকে লক্ষ্য করছি। আমার কি এই লাইব্রেরি Microsoft.AspNet.WebAPI.Client.dll এ লাইব্রেরির রেফারেন্স সেট করতে হবে? আমি কখনই এএসপি.নেট এমভিসি প্রকল্পে এমন কোনও রেফারেন্স সেট করি না যা আমার ওয়েব এপিআই ব্যবহার করে এবং ঠিক কাজ করে।
ওয়াটার কুলার ভি 2

5
আপনাকে Microsoft.AspNet.WebApi.Clientনুগেট ইনস্টল করতে হবে । এটি ইন্টারনেট থেকে সর্বশেষতম সংস্করণ ডাউনলোড করবে এবং আপনার কনসোল অ্যাপ্লিকেশনটিতে অ্যাসেমব্লিকে উল্লেখ করবে। এএসপি.এনইটি এমভিসি প্রকল্পের টেমপ্লেটটি হুবহু এটিই করে এবং এটি কাজ করার জন্য আপনাকে কোনও কিছু ইনস্টল করার প্রয়োজন হয় না বলে কারণ। তবে আপনার কনসোল অ্যাপ্লিকেশনটিতে এমন কোনও জিনিস নেই।
দারিন দিমিত্রভ

4
ধন্যবাদ তুমি যা বলেছ আমি তা করেছি। আমার সমাধানে আমার 12 টি প্রকল্প রয়েছে, তবে কিছু অদ্ভুত কারণে আমি লাইব্রেরি প্যাকেজ ম্যানেজার কনসোলে 'ইনস্টল-প্যাকেজ মাইক্রোসফ্ট.অ্যাস্পনেট.ওয়েবএপি.স্লায়েন্ট' বলার পরে এটির স্বাভাবিক ট্রেস মুদ্রিত করে এবং পরে বলেছিল 'সফলভাবে মাইক্রোসফ্ট ইনস্টল করা হয়েছে। .WebApi.Clyent in MyMVCProjectNameAndNotMyConsoleProjectName '। পরের বার আমি আমার কনসোল প্রকল্পটি নির্বাচন করে প্যাকেজ ম্যানেজার কনসোলে একই জিনিস টাইপ করেছি। এটি বলেছে যে মাইএমভিসিপিআরজেক্টনামটি ইতিমধ্যে মাইক্রোসফ্ট.এএসপনেট.ওয়েবপিপি.ক্লায়েন্টকে উল্লেখ করেছে। আমি দ্বিধান্বিত.
ওয়াটার কুলার ভি 2

হ্যা আমিও. শুন্য থেকে শুরু করা. নতুন কনসোল অ্যাপ্লিকেশন, নিউগেট কনসোল খুলুন, টাইপ Install-Package Microsoft.AspNet.WebApi.Clientকরুন এবং কোডটি চেষ্টা করুন।
দারিন দিমিত্রভ

22
  • আপনি কখন থেকে সমাবেশের রেফারেন্স খুঁজে পেতে অক্ষম হন (রেফারেন্সটিতে ডান ক্লিক করুন -> প্রয়োজনীয় সমাবেশ যুক্ত করুন)

এই প্যাকেজ ম্যানেজার কনসোলটি
ইনস্টল-প্যাকেজ সিস্টেম.নেট.এইচটিপি.ফর্ম্যাটটিং.এক্সটেনশন- সংস্করণ 5.2.3 ব্যবহার করে দেখুন এবং তারপরে অ্যাড রেফারেন্স ব্যবহার করে যুক্ত করুন।


4
আমি ডটনেটকোর অ্যাপ্লিকেশনটি সর্বশেষ ২.২ থেকে ৩.১ এ স্থানান্তরিত করে এই ত্রুটিটির মুখোমুখি হয়েছি System আমার অ্যাপ্লিকেশনটি ইতিমধ্যে System.Net.Http. Formatting.Exration v5.2.3 এর রেফারেন্স পেয়েছে তবে আমার অ্যাপ্লিকেশনটি এই ত্রুটির অভিযোগ করে, তাই আমি মাইক্রোসফ্ট.অস্পনেট.ওয়েবএপি প্যাকেজ ইনস্টল করেছি I । রিকিন এবং ডারিনের পরামর্শ অনুসারে আবেদন এবং সেই সমস্যাটি সমাধান হওয়ার পরে। ধন্যবাদ
একেএস

12

System.Net.Http. Formatting.dll এ একটি রেফারেন্স যুক্ত করার ফলে ডিএলএল অমিল সমস্যা হতে পারে। এই মুহুর্তে, System.Net.Http. Formatting.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 এ একটি রেফারেন্স যুক্ত করার বিকল্প সমাধানটি প্রতিক্রিয়াটিকে স্ট্রিং হিসাবে পড়তে হবে এবং তারপরে জসনকন্টার্ট.ডিজারালাইজ অবজেক্ট (রেসপন্সএস্টস্ট্রিং) এর সাথে নিজেকে বিকৃত করা। সম্পূর্ণ পদ্ধতিটি হ'ল:

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

অথবা আপনার যদি ভিএস 2012 থাকে তবে আপনি প্যাকেজ ম্যানেজার কনসোলের কাছে যেতে পারেন এবং ইনস্টল-প্যাকেজ মাইক্রোসফ্ট টাইপ করতে পারেন spএএসপনেট.ওয়েবএপি.স্লায়েন্ট

এটি প্যাকেজের সর্বশেষতম সংস্করণটি ডাউনলোড করবে


এটি আমার জন্য এটি স্থির করে দিয়েছে। - ভিএস ২০১৩ ব্যবহার করে
ড্যান রেসন

যদি আপনার কাছে ইতিমধ্যে একটি মাইক্রোসফ্ট রয়েছে spএসপনেট. ওয়েবেএপি.ক্লায়েন্ট প্যাকেজটি এটি ইনস্টল ও ইনস্টল করার চেষ্টা না করে, যা আমার ইস্যুটি 5.2.3 এর জন্য স্থির করেছে
নবীন

-1

আপনার প্রকল্পে এই বিধানসভা রেফারেন্স ব্যবহার করুন

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

7
জানুয়ারী 2013 থেকে গৃহীত উত্তর ইতিমধ্যে এটি ব্যাখ্যা করে এবং আরও তথ্য রয়েছে। আপনার উত্তরটিও সঠিকভাবে ফর্ম্যাট করা হয়নি।
ব্যবহারকারী 247702
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.