HttpClient PostAsJsonAsync विधि का समर्थन नहीं कर रहा है #


255

मैं अपने वेब एप्लिकेशन से वेब API कॉल करने का प्रयास कर रहा हूं। मैं .Net 4.5 का उपयोग कर रहा हूं और कोड लिखते समय मुझे त्रुटि मिल रही है HttpClientजिसमें परिभाषा PostAsJsonAsyncविधि नहीं है।

नीचे कोड है:

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
   new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

और मुझे त्रुटि संदेश मिल रहा है:

त्रुटि: 'System.Net.Http.HttpClient' में 'PostAsJsonAsync' की कोई परिभाषा नहीं है और न ही कोई विस्तार विधि 'PostAsJsonAsync' प्रकार के पहले तर्क को स्वीकार करते हुए 'System.Net.Http.HtpClient' पाई जा सकती है (क्या आप गायब हैं? निर्देशन या विधानसभा संदर्भ का उपयोग करना?)

कृपया मुझे एक नज़र और सलाह दें।


13
सबसे अच्छा विकल्प 'Microsoft.AspNet.WebApi.Client' .Nuget पैकेज जोड़ना है। बस!
सचिन पवार

जवाबों:


435

हां, आपको एक संदर्भ जोड़ना होगा

System.Net.Http.Formatting.dll

यह एक्सटेंशन असेंबली क्षेत्र में पाया जा सकता है।

इसे हासिल करने का एक अच्छा तरीका है, अपनी परियोजना में NuGet पैकेजMicrosoft.AspNet.WebApi.Client को जोड़ना ।


7
अब मुझे एक त्रुटि मिल रही है: "फ़ाइल या असेंबली को लोड नहीं कर सका 'न्यूटनसॉफ्ट.जॉन, संस्करण = 4.5.0.0, संस्कृति = तटस्थ, PublicKeyToken = 30ad4fe6b2a6aeed' या इसकी कोई एक निर्भरता। सिस्टम फ़ाइल को निर्दिष्ट नहीं कर सकता है।"
Jidheesh राजन 12

89
पाया कि मुझे अपने प्रोजेक्ट में "System.Net.Http" के .NET फ्रेमवर्क संस्करण के साथ काम करने वाले प्रारूपण के संस्करण को सुनिश्चित करने के लिए NuGet पैकेज "Microsoft.AspNet.WebApi.Client" को जोड़ना पड़ा।
टॉड एच।

27
एक मानक प्रणाली असेंबली को संदर्भित करने के लिए मुझे कार्य करने के लिए इंटरनेट पर यादृच्छिक स्थानों से खुला स्रोत सामान डाउनलोड करने की आवश्यकता क्यों है? अगर यह अपनी निर्भरता को हल नहीं कर सकता है तो भी यह क्यों संकलन करता है? यह मुझे कोई अंत नहीं है!
न्यूट्रिनो

4
@Neutrino क्या आप कोड स्वयं लिखेंगे? आपको आभारी होना चाहिए कि Microsoft और अन्य जगहों पर लोगों ने कोड लिखा है जिसे आप मुफ्त में उपयोग कर सकते हैं
reggaeguitar

4
PM> इंस्टाल-पैकेज System.Net.Http.Formatting.Extension
यार

193

PostAsJsonAsyncअब System.Net.Http.dll(.NET 4.5.2) में नहीं है आप इसमें एक संदर्भ जोड़ सकते हैं System.Net.Http.Formatting.dll, लेकिन यह वास्तव में पुराने संस्करण का है। मैं हमारी टीम के निर्माण सर्वर पर इसके साथ समस्याओं में भाग गया, ये दोनों एक साथ सहयोग नहीं करेंगे।

वैकल्पिक रूप से, आप बदल सकते हैं PostAsJsonAsyncएक साथ PostAsyncकॉल, जो नए dll का सिर्फ एक हिस्सा है। बदलने के

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

साथ में:

var response = client.PostAsync("api/AgentCollection", new StringContent(
   new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;

ध्यान दें कि JavaScriptSerializerनाम स्थान में है System.Web.Script.Serialization:।

आपको अपने csproj में एक विधानसभा संदर्भ जोड़ना होगा: System.Web.Extensions.dll

Https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836 देखें


7
इसका उत्तर होना चाहिए। किसी काम को करने का सबसे अच्छा तरीका है उसका सही तरीका
एलिरेज़ा

4
यह अब तक का सबसे अच्छा जवाब है। NuGet संकुल या dll जोड़ने का प्रयास न करें।
गोचन कर्ट

3
पूरी तरह से सबसे अच्छा जवाब। चयनित उत्तर एक सबसे अच्छा अभ्यास नहीं है सब पर है, वास्तव में माइक्रोसॉफ्ट संदर्भ DLLs के लिए नहीं की सिफारिश की
Astaar

4
विषय से बाहर, लेकिन मैं इसे वैसे भी उल्लेख करना चाहता हूं: await FooAsync()इसके बजाय का उपयोग करें FooAsync().Result। बाद वाला गतिरोध आ सकता है। Stackoverflow.com/q/17248680/2272514 और इसका स्वीकृत उत्तर देखें । विवरण के बारे में अच्छे लिंक भी हैं।
थॉमस श्रेटर

2
"Application / json" के बजाय एक प्रकार का उपयोग करने के लिए आप MediaTypeNames.Application.Json docs.microsoft.com/en-us/dotnet/api/…
daviesdoesit

163

लापता संदर्भ है System.Net.Http.Formatting.dll। लेकिन बेहतर समाधान यह है कि मेरी परियोजना में Microsoft.AspNet.WebApi.Client.NET फ्रेमवर्क संस्करण के साथ काम करने वाले स्वरूपण dll के संस्करण को सुनिश्चित करने के लिए NuGet पैकेज को जोड़ा जाए System.Net.Http


1
@ युवल - मुझे अब एहसास हुआ कि "समाधान" का सुझाव मैंने एक टिप्पणी की तरह दिया। यह पता चला है कि आंद्रेओ ने मेरे द्वारा सुझाए गए नुगेट पैकेज को लिखा था।
टॉड एच।

यह मेरे लिए जवाब था! (मेरे प्रश्न के लिए)
जेनोनड

34

जैसा कि पहले ही डिबेट हो चुका है, यह विधि .NET 4.5.2 के बाद से अब उपलब्ध नहीं है। Jeroen K के उत्तर पर विस्तार करने के लिए आप एक एक्सटेंशन विधि बना सकते हैं:

public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model)
{
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(model);
    var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
    return await client.PostAsync(requestUrl, stringContent);
}

अब आप कॉल कर सकते हैं client.PostAsJsonAsync("api/AgentCollection", user)


12

मैं इस मुद्दे पर भी एक परियोजना मैं सिर्फ स्रोत नियंत्रण से बाहर की जाँच की थी।

लक्षण ऊपर वर्णित त्रुटि और एक संदर्भ पर एक पीला चेतावनी त्रिकोण था System.Net.Http.Formatting

इसे ठीक करने के लिए, मैंने टूटे हुए संदर्भ को हटा दिया और फिर नवीनतम संस्करण को स्थापित करने के लिए NuGet का उपयोग किया Microsoft.AspNet.WebApi.Client


2
यह काम करता हैं! नगेट कंसोल द्वारा स्थापित करने के लिएInstall-Package Microsoft.AspNet.WebApi.Client
यु यांग जियान

4

मुझे पता है कि यह उत्तर बहुत देर हो चुकी है, मेरे पास एक ही मुद्दा था और मैं System.Net.Http.Formatting.ExtensionNuget जोड़ रहा था , यहाँ और वहाँ जाँच करने के बाद मैंने पाया कि Nuget जोड़ा गया है, लेकिन System.Net.Http.Formatting.dllसंदर्भों में नहीं जोड़ा गया था, मैंने अभी Nuget को पुनर्स्थापित किया था



2

एक साधारण कॉल करने के लिए कोड की इस राशि को लिखने के बजाय, आप इंटरनेट पर उपलब्ध रैपरों में से एक का उपयोग कर सकते हैं।

मैंने एक लिखा है WebApiClient, NuGet पर उपलब्ध ... इसे देखें!

https://www.nuget.org/packages/WebApiRestService.WebApiClient/


@Andreo लिंक ( webapiclient.azurewebooks.net ) अब 30-नवंबर -2017 को टूट गया है। NuGet वर्किंग लिंक nuget.org/packages/WebApiRestService.WebApiClient है
G

दुर्भाग्य से Microsoft ने मेरी azure सदस्यता समाप्त कर दी है और url अब मान्य नहीं है :(
आंद्रेओ रोमेरा

2

यदि आप ब्लेज़र में चारों ओर खेल रहे हैं और त्रुटि प्राप्त करते हैं, तो आपको पैकेज जोड़ना होगा Microsoft.AspNetCore.Blazor.HttpClient


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.