दिलचस्प पोस्ट
कैसे डीबी लोड करने के लिए: स्वचालित रूप से टेस्ट डेटाबेस में बीज डेटा? मैं ASP.NET MVC में क्लाइंट साइड और प्रॉक्सी कैशिंग कैसे अक्षम कर सकता हूं? java.lang.NoClassDefFound त्रुटि: संगठन / वसंतफ्रेमवर्क / कोर / एनवाईवी / कॉन्फ़िगर करने योग्य पर्यावरण क्या मैं अनुरोध पर बाहरी स्टाइलशीट लोड कर सकता हूं? PostgreSQL की तरह क्वेरी प्रदर्शन विविधता एंड्रॉइड पर हां / नहीं संवाद बॉक्स कैसे प्रदर्शित करें? वास्तविक दुनिया उदाहरण के साथ "डेकोरेटर पैटर्न" को समझें जावास्क्रिप्ट: कक्षा। विधि बनाम कक्षा। प्रोटोपीपी। विधि सी # में SQL सर्वर डेटाबेस से डेटा कैसे प्राप्त करें? ट्रिगर समारोह में गतिशील तालिका नाम के साथ INSERT टेम्पलेट सीमा C ++ AppCompat के साथ नहीं दिखाया गया है द्विआधारी प्रतिनिधित्व करने के लिए डबल कन्वर्ट? फ़िल्टरिंग पंक्ति जिसमें एक निश्चित स्ट्रिंग है जो dplyr का उपयोग कर रहे हैं पायथन में अंडाकार स्लाइसिंग सिंटैक्स का उपयोग कैसे करें?

एचटीटीपी क्लाइंट अनुरोध के लिए आप कंटेंट-टाइप हेडर कैसे सेट करते हैं?

मैं एक HttpClient ऑब्जेक्ट के Content-Type हैडर को सेट करने की कोशिश कर रहा हूं जैसा कि मैं एक एपीआई बुला रहा हूँ।

मैंने नीचे की तरह Content-Type सेट करने की कोशिश की:

 using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("http://example.com/"); httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json"); // ... } 

यह मुझे Accept हेडर जोड़ने की अनुमति देता है, लेकिन जब मैं Content-Type जोड़ने का प्रयास करता हूं, तो यह निम्न अपवाद फेंकता है:

अनुपयुक्त हेडर नाम। सुनिश्चित करें कि अनुरोध हैडर का उपयोग HttpRequestMessage , HttpResponseMessage साथ प्रतिक्रिया शीर्षकों, और HttpContent ऑब्जेक्ट के साथ सामग्री शीर्ष लेख के साथ किया जाता है।

मैं HttpClient अनुरोध में Content-Type हैडर कैसे सेट कर सकता हूं?

Solutions Collecting From Web of "एचटीटीपी क्लाइंट अनुरोध के लिए आप कंटेंट-टाइप हेडर कैसे सेट करते हैं?"

सामग्री का प्रकार सामग्री का एक शीर्ष लेख है, अनुरोध के नहीं, यही वजह है कि यह असफल हो रहा है। रॉबर्ट लेवी द्वारा सुझावित किए गए AddWithoutValidation काम कर सकता है, लेकिन आप अनुरोध सामग्री को स्वयं बनाते समय सामग्री प्रकार सेट भी कर सकते हैं (ध्यान दें कि कोड स्निपेट "एप्लिकेशन / जेएसन" दो स्थानों में – स्वीकृत और कंटेंट-टाइप हैडर के लिए जोड़ता है):

 HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://example.com/"); client.DefaultRequestHeaders .Accept .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress"); request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}", Encoding.UTF8, "application/json");//CONTENT-TYPE header client.SendAsync(request) .ContinueWith(responseTask => { Console.WriteLine("Response: {0}", responseTask.Result); }); 

उन लोगों के लिए जिन्होंने कार्लोस समाधान पर जॉन्स की टिप्पणी नहीं देखी …

 req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 

यदि आप एक छोटी लाइब्रेरी निर्भरता को नहीं मानते हैं , तो Flurl.Http [प्रकटीकरण: मैं लेखक हूं] इस uber-simple को बनाता है इसकी PostJsonAsync विधि दोनों सामग्री serializing और सामग्री content-type शीर्ष लेख content-type स्थापना का ख्याल रखती है, और ReceiveJson प्रतिक्रिया deserializes। यदि accept हेडर आवश्यक है, तो आपको स्वयं को सेट करने की आवश्यकता होगी, लेकिन Flurl ऐसा करने का एक बहुत ही साफ तरीका प्रदान करता है:

 using Flurl.Http; var result = await "http://example.com/" .WithHeader("Accept", "application/json") .PostJsonAsync(new { ... }) .ReceiveJson<TResult>(); 

Flurl HttpClient और Json.NET का उपयोग हुड के नीचे है, और यह एक पीसीएल है, इसलिए यह विभिन्न प्लेटफार्मों पर काम करेगा।

 PM> Install-Package Flurl.Http 

TryAddWithoutValidation का उपयोग करने का प्रयास करें

  var client = new HttpClient(); client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8"); 

Add बजाय AddWithoutValidation कॉल करें ( यह MSDN लिंक देखें)

वैकल्पिक रूप से, मैं एपीआई का अनुमान लगा रहा हूं जो आप वास्तव में उपयोग कर रहे हैं केवल पोस्ट या पट अनुरोधों (सामान्य GET अनुरोधों के लिए) के लिए यह आवश्यक नहीं है। उस स्थिति में, जब आप HttpClient.PostAsync कॉल करते हैं और एक HttpContent में पास करते हैं, तो उस HttpContent ऑब्जेक्ट की Headers संपत्ति पर सेट करें

.Net कुछ मानकों का पालन करने के लिए मजबूर होने की कोशिश करता है, अर्थात Content-Type हैडर केवल उन अनुरोधों पर निर्दिष्ट किया जा सकता है जिनके पास सामग्री है (जैसे कि POST , PUT , आदि)। इसलिए, जैसा कि दूसरों ने संकेत दिया है, Content-Type हैडर को सेट करने का पसंदीदा तरीका है HttpContent.Headers.ContentType Content-Type हेडर। Content-Type गुण।

इसके साथ ही, कुछ एपीआई (जैसे कि 2016-12-19 के रूप में लिक्विडफाइल्स एपीआई ) को GET अनुरोध के लिए Content-Type हैडर सेट करना आवश्यक है। .NET इस हेडर को अनुरोध पर स्वयं सेट करने की अनुमति नहीं TryAddWithoutValidation यहां तक ​​कि TryAddWithoutValidation का उपयोग कर भी। इसके अलावा, आप अनुरोध के लिए Content निर्दिष्ट नहीं कर सकते – भले ही यह शून्य-लंबाई का हो यह एकमात्र तरीका है जो मुझे आसपास मिल सकता था प्रतिबिंब का सहारा था कोड (यदि किसी और की जरूरत है) है

 var field = typeof(System.Net.Http.Headers.HttpRequestHeaders) .GetField("invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) ?? typeof(System.Net.Http.Headers.HttpRequestHeaders) .GetField("s_invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static); if (field != null) { var invalidFields = (HashSet<string>)field.GetValue(null); invalidFields.Remove("Content-Type"); } _client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "text/xml"); 

संपादित करें:

जैसा कि टिप्पणियों में बताया गया है, इस क्षेत्र के डीएलएल के विभिन्न संस्करणों में अलग-अलग नाम हैं। GitHub पर स्रोत कोड में , फ़ील्ड को वर्तमान में s_invalidHeaders नाम दिया गया है डेविड थॉम्पसन के सुझाव के अनुसार इस उदाहरण के लिए खाते में संशोधित किया गया है।

.NET कोर के बारे में कुछ अतिरिक्त जानकारी (एक निजी क्षेत्र को स्थापित करने के बारे में सामग्री प्रकार की सामग्री के प्रकार के अनुरोध के बारे में ईराडोके के पोस्ट को पढ़ने के बाद) …

मेरा कोड डिबग करने के बाद, मुझे प्रतिबिंब के माध्यम से सेट करने के लिए निजी फ़ील्ड नहीं दिखाई दे रहा है – इसलिए मुझे लगा कि मैं समस्या को पुन: बनाने की कोशिश करूँगा।

मैंने निम्न कोड का उपयोग करते हुए .NET 4.6 का प्रयोग किया है:

 HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, @"myUrl"); httpRequest.Content = new StringContent(string.Empty, Encoding.UTF8, "application/json"); HttpClient client = new HttpClient(); Task<HttpResponseMessage> response = client.SendAsync(httpRequest); //I know I should have used async/await here! var result = response.Result; 

और, जैसा कि अपेक्षित है, मुझे सामग्री के साथ एक कुल अपवाद मिलता है "Cannot send a content-body with this verb-type."

हालांकि, अगर मैं .NET कोर (1.1) के साथ एक ही काम करता हूंमुझे एक अपवाद नहीं मिलता है। मेरे अनुरोध को मेरे सर्वर एप्लिकेशन द्वारा बहुत खुशी से उत्तर दिया गया था, और सामग्री प्रकार को उठाया गया था

मुझे उस बारे में सुखद आश्चर्य हुआ, और मुझे आशा है कि यह किसी को मदद करता है!