5

मैं सी # \ एक्सएएमएल मेट्रो-यूई अनुप्रयोग विकसित कर रहा हूं। मैं कुछ सेवा कॉल करना चाहता हूं और इसके लिए HttpWebRequest का उपयोग करना चाहता हूं। HttpWebRequest के पिछले अहसास में ContentLength और UserAgent गुण शामिल हैं। लेकिन WinRT के लिए प्राप्ति में यह नहीं है। मैंने इस post में वर्णित दृष्टिकोण का उपयोग करने की कोशिश की। यह UserAgent के लिए काम करता है लेकिन ContentLength के लिए नहीं। मैं HeadersWindows8 applicaition में HttpWebRequest को शीर्षलेख कैसे जोड़ें?

request.Headers["Content-length"] = Length; 
request.Headers["User-agent"] = UserAgent; 

स्थापित करने के लिए कोशिश की है लेकिन अपवाद प्राप्त " 'सामग्री-लंबाई' शीर्षक उचित संपत्ति या विधि का उपयोग कर संशोधित किया जाना चाहिए।"

क्या HeadersHttpWebRequest में WinRT में एहसास हुआ है?

+0

यदि आप सेटिंग सामग्री-लंबाई को हटाते हैं, तो क्या यह काम करता है? यह संभव है कि HttpWepRequest आपको सामग्री-लंबाई सेट करने की अनुमति नहीं देगा क्योंकि यह आपके द्वारा भेजी गई सामग्री के आधार पर इसकी गणना करता है। –

+0

@LarryOsterman नोप। इसके अलावा मुझे 'सामग्री-प्रकार' संपत्ति सेट करने की आवश्यकता है। तो मुझे भी टिप्पणी करनी चाहिए। लिंक के माध्यम से वर्णित दृष्टिकोण के लिए: जब मैंने इन गुणों पर टिप्पणी की तो मुझे '400 खराब अनुरोध 'मिलता है। जब मैंने इन्हें 'HttpWebRequest' के लिए टिप्पणी की तो मुझे बेबक्सप्शन मिला' अंतर्निहित कनेक्शन बंद था: कनेक्शन अप्रत्याशित रूप से बंद कर दिया गया था। – RredCat

+0

हम्म। मैं HttpWebRequest ब्लॉकिंग सेटिंग सामग्री-लंबाई को देख सकता हूं (क्योंकि यह सामग्री-लंबाई की गणना कर सकता है)। बुरे अनुरोध का तात्पर्य है कि संदेश भेजने में कुछ गड़बड़ है, फिडलर क्या दिखाता है कि आपने भेजा है? –

उत्तर

12

HttpWebRequest में WinRT के तहत अर्ध-बहिष्कृत स्थिति है। कुछ शीर्षलेख मान जिन्हें पहले पहले .NET प्लेटफ़ॉर्म पर संशोधित किया जा सकता था, अब इसके साथ संशोधित नहीं किया जा सकता है।

ऐसा लगता है कि HttpClient एक सरल एपीआई और पूर्ण एसिंक समर्थन के साथ HttpWebRequest के लिए नया और बेहतर प्रतिस्थापन है।

चूंकि आप सामग्री-लंबाई निर्दिष्ट करना चाहते हैं, मुझे लगता है कि आप सर्वर पर कुछ पोस्ट करने या PUT करने का प्रयास कर रहे हैं। उस स्थिति में, आप PostAsync() या PutAsync() को उपयुक्त के रूप में उपयोग करना चाहेंगे।

var req = new HttpClient(); 
    req.DefaultRequestHeaders.Add("User-agent", UserAgent); 
    req.DefaultRequestHeaders.Add("Content-length", Length); 
    return await req.PostAsync(RequestURL, Body); 

तुम शायद वास्तव में, क्योंकि यह स्वचालित रूप से शरीर की वास्तविक लंबाई के आधार पर उन तरीकों से शामिल किया जाएगा, सामग्री-लंबाई हेडर निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन आप इसे किसी भी तरह से कोशिश कर सकते हैं।

+0

हाँ .. आप सही हैं .. आपके उत्तर के लिए धन्यवाद। मैं कुछ ऐसा खेल रहा हूं .. लेकिन जैसा कि मैं देख सकता हूं कि 'बॉडी' 'HttpContent' प्रकार है, है ना? और तुमने अपने पैरामीटर रखे, है ना? क्या आप समझा सकते हैं कि आपने 'HttpContent' के उदाहरण में पैरा कैसे लगाए? – RredCat

+0

मुझे यह मिला। मैंने पैरामीटर स्ट्रिंग को 'ASCII' में एन्कोड किया है। लेकिन यह पूरा समाधान नहीं है। मैंने @ लैरी ओस्टर्मन को टिप्पणी में उल्लेख किया कि मुझे 'ContentType' सेट करने में समस्या थी। मुझे ऐसा करने का तरीका मिला - 'content.Headers.ContentType = new MediaTypeHeaderValue ("एप्लिकेशन/एक्स-www-form-urlencoded");' जो भी हो, मैंने आपको जवाब के रूप में पोस्ट किया क्योंकि आप उत्तर के बहुत करीब हैं) – RredCat

संबंधित मुद्दे