C# HttpClient में Content-Type: अनुरोध को कैसे कॉन्फ़िगर करें और तोड़ें नहीं

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Content-Type हर C# डेवलपर का दर्द क्यों है?

\n\n

क्या आपने कभी C# में HttpClient के माध्यम से POST अनुरोध भेजा है और सर्वर ने आपको 415 (Unsupported Media Type) की रहस्यमयी त्रुटि दी है? परिचित लगता है, है ना? अक्सर समस्या एक छोटे लेकिन अत्यंत महत्वपूर्ण हेडर में होती है — Content-Type। इसके बिना, सर्वर को पता ही नहीं चलता कि आपके डेटा की व्याख्या कैसे करें: क्या यह JSON है, XML है या सामान्य फॉर्म?

\n\n

इस लेख में, हम जानेंगे कि C# में HttpClient के लिए Content-Type को सही तरीके से कैसे सेट करें, उन सबसे सामान्य गलतियों पर चर्चा करेंगे जिनमें शुरुआती (और केवल वे ही नहीं) फंसते हैं, और अनुरोध भेजना सीखेंगे ताकि सर्वर आपको आधी बात में समझ जाए। चलिए शुरू करते हैं!

\n\n

Content-Type क्या है और इसकी आवश्यकता क्यों है?

\n\n

Content-Type एक HTTP हेडर है जो सर्वर को बताता है कि अनुरोध (या प्रतिक्रिया) के मुख्य भाग में डेटा किस प्रारूप में भेजा जा रहा है। यदि आप JSON भेज रहे हैं, तो आपको कहना होगा: application/json। यदि XML है — application/xml। यदि फॉर्म डेटा है — application/x-www-form-urlencoded।

\n\n

C# में HttpClient एक शक्तिशाली लेकिन धोखेबाज उपकरण है। यह स्वयं प्रारूप का अनुमान लगा सकता है, और नहीं भी लगा सकता है। और यदि आप DefaultRequestHeaders के माध्यम से केवल हेडर जोड़ने का प्रयास करते हैं, तो आपको एक अप्रिय आश्चर्य मिलेगा: Content-Type डिफ़ॉल्ट अनुरोध हेडर का हिस्सा नहीं है। यह केवल अनुरोध के मुख्य भाग से संबंधित है।

\n\n

शुरुआती की विशिष्ट गलती

\n\n
var client = new HttpClient();\nclient.DefaultRequestHeaders.Add("Content-Type", "application/json"); // ❌ त्रुटि!\n
\n\n

यह कोड InvalidOperationException अपवाद उत्पन्न करेगा जिसमें संदेश होगा: "Misused header name. Make sure request headers are used with HttpRequestMessage, response ones with HttpResponseMessage, and content ones with HttpContent objects." यह डरावना लगता है, लेकिन समाधान सरल है — आगे पढ़ें।

\n\n

C# HttpClient में Content-Type सेट करने के तीन तरीके

\n\n

तरीका 1: StringContent का उपयोग करें (सबसे सरल)

\n\n

सबसे लोकप्रिय और सही तरीका है StringContent वर्ग के माध्यम से अनुरोध के मुख्य भाग के साथ हेडर भेजना।

\n\n
using System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static async Task Main()\n    {\n        var client = new HttpClient();\n        var json = "{ \\"name\\": \\"PythonLib\\", \\"type\\": \\"education\\" }";\n        \n        // स्पष्ट Content-Type निर्दिष्ट करके कंटेंट बनाएँ\n        var content = new StringContent(json, Encoding.UTF8, "application/json");\n        \n        var response = await client.PostAsync("https://api.example.com/data", content);\n        Console.WriteLine(await response.Content.ReadAsStringAsync());\n    }\n}\n
\n\n

इस उदाहरण में, Content-Type: application/json; charset=utf-8 स्वचालित रूप से सेट हो जाता है। दूसरा पैरामीटर (Encoding.UTF8) एन्कोडिंग सेट करता है, तीसरा मीडियाटाइप सेट करता है। वोइला — सर्वर खुश है!

\n\n

तरीका 2: ByteArrayContent के माध्यम से (उन्नत उपयोगकर्ताओं के लिए)

\n\n

यदि आप बाइनरी डेटा के साथ काम कर रहे हैं या पूर्ण नियंत्रण चाहते हैं, तो ByteArrayContent का उपयोग करें।

\n\n
using System.Net.Http;\nusing System.Text;\n\nvar jsonBytes = Encoding.UTF8.GetBytes("{ \\"message\\": \\"Hello\\" }");\nvar content = new ByteArrayContent(jsonBytes);\ncontent.Headers.ContentType = new MediaTypeHeaderValue("application/json");\n\nvar response = await client.PostAsync("https://api.example.com/upload", content);\n
\n\n

यहाँ हम Headers गुण के माध्यम से मैन्युअल रूप से ContentType सेट करते हैं। यह तरीका तब उपयोगी होता है जब आपको अतिरिक्त हेडर (जैसे Content-Encoding) जोड़ने की आवश्यकता होती है।

\n\n

तरीका 3: HttpRequestMessage + पूर्ण नियंत्रण

\n\n

कभी-कभी आपको मुख्य भाग के साथ GET अनुरोध भेजने की आवश्यकता होती है (हाँ, यह भी संभव है) या अनुरोध स्तर पर हेडर को ओवरराइड करने की आवश्यकता होती है। तब

ब्लॉग

पुस्तक अनुशंसाएँ