2013-09-29 6 views
6

मैं HttpWebRequest से HttpClient का उपयोग करने से कुछ कोड परिवर्तित कर रहा हूं। एक समस्या जो मुझे हो रही है वह सामग्री-प्रकार प्रतिक्रिया शीर्षलेख से वर्णमाला प्राप्त कर रही है।क्या सामग्री-प्रकार वर्णमाला HttpResponseMessage से उजागर नहीं है?

जब HttpWebRequest का उपयोग कर, चारसेट HttpWebResponse.CharacterSet संपत्ति में सामने आ रहा है, इस

using (WebResponse response = await this.webRequest.GetResponseAsync()) 
{ 
    string characterSet = ((HttpWebResponse)response).CharacterSet; 

तुम भी WebResponse.ContentType संपत्ति से या HttpWebResponse.Headers में सामग्री प्रकार हैडर से इसे करने के लिए प्राप्त कर सकते हैं की तरह।

HttpClient का उपयोग करके, वर्णमाला ContentType शीर्षलेख से अनुपलब्ध प्रतीत होता है।

यहाँ कोड है कि मैं HttpClient के लिए उपयोग कर रहा हूँ है:

using (HttpClient httpClient = new HttpClient(httpClientHandler)) 
{ 
    using (HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(uri, HttpCompletionOption.ResponseContentRead)) 
    { 
     charset = httpResponseMessage.Content.Headers.ContentType.CharSet; 

CharSet संपत्ति हमेशा null है। HttpResponseMessage में Headers संपत्ति है लेकिन इसमें सामग्री-प्रकार शीर्षलेख नहीं है। HttpResponseMessage.Content में हेडर संपत्ति भी है, जिसमें सामग्री-प्रकार शीर्षलेख शामिल होता है, लेकिन वह हेडर "Content-Type: text/html" दिखाता है - इसमें वर्णमाला भाग नहीं है।

उसी यूआरएल के लिए HttpWebResponse के साथ पहले दृष्टिकोण का उपयोग करके, मुझे सामग्री-प्रकार शीर्षलेख का वर्णमाला भाग मिलता है। क्या मैं कुछ भूल रहा हूँ?

+0

अरे, ओवरफ्लो स्टैक करने के लिए स्वागत है। एफवाईआई, आप बैकटिक्स में उन्हें संलग्न करके 'HttpResponseMessage' verbatim जैसी चीज़ों को प्रिंट कर सकते हैं। –

उत्तर

0

मेरा मानना ​​है कि Content-Type हैडर सर्वर से लौटे क्रम में शामिल करने के लिए 'text/html;charset=UTF-8' की तरह 'शब्दसमुच्चय' यह CharSet संपत्ति में दिखाने के लिए के लिए होगा। फिडलर (http://www.telerik.com/fiddler) जैसे टूल में कच्ची प्रतिक्रिया की जांच करने से मदद मिल सकती है।

और Content-Type हेडर को HttpResponseMessage ऑब्जेक्ट में दफन किया गया था, जहां मुझे यह जानने में सहायता के लिए धन्यवाद!

0

एचटीपी क्लाइंट जानबूझकर वर्णमाला का पर्दाफाश नहीं करता है। निश्चित रूप से, यह नहीं कर सकता। यह असीमित है, इसलिए जब यह किसी सर्वर से कनेक्ट होता है, तो यह प्रतिक्रिया तक प्रतीक्षा करता है। यह HttpResponseMessage में ट्रांसफर एन्कोडिंग को छोड़कर वर्णमाला या अन्य किसी भी चीज़ से अवगत नहीं है जिसमें "खंड" या "ज़िप" को छोड़कर कुछ भी शामिल नहीं है।

तो प्रतिक्रिया निकाय के एन्कोडिंग प्राप्त करने के लिए, हमें इसे एक चर में पढ़ना चाहिए और फिर अच्छी तरह से देखना चाहिए।

0

मैं एक HttpResponseMessage अंदर और अपने प्रश्न के बाद से चारसेट फेंकना करने के लिए देख रहा था गूगल पर पहले है और है कि मैं इस सवाल का जवाब कई पृष्ठों के नीचे पाया, यहाँ कोड

 httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv"); 
     httpResponseMessage.Content.Headers.ContentType.CharSet = Encoding.UTF8.HeaderName; 
     httpResponseMessage.Content.Headers.Add("CodePage", Encoding.UTF8.CodePage.ToString()); 
संबंधित मुद्दे