2011-10-31 20 views
15

तो मेरे पास एक ऐसा पृष्ठ है जो पोस्ट विधि के माध्यम से एक्सएमएल स्वीकार कर रहा है। यहाँ कोड का एक छोटा सा है:इनपुट स्ट्रीम को डीकोड करना

if (Request.ContentType != "text/xml") 
     throw new HttpException(500, "Unexpected Content Type"); 

StreamReader stream = new StreamReader(Request.InputStream); 
string x = stream.ReadToEnd(); // added to view content of input stream 

XDocument xmlInput = XDocument.Load(stream); 

मैं एक त्रुटि हो रही थी, तो मैं एक स्ट्रिंग के लिए धारा परिवर्तित, बस अगर सब कुछ सही ढंग भेजा जा रहा था देखने के लिए।

% 3c% 3fxml + संस्करण% 3d% 271.0% 27 + एन्कोडिंग% 3d% 27UTF-8% 27% 3F% 3E% 0 d% 0A

: जब मैं सामग्री को देखा, तो वह ऐसा देखा

तो मुझे लगता है कि मुझे स्ट्रीम को डीकोड करने की आवश्यकता है। एकमात्र समस्या यह है कि मुझे नहीं पता कि मैं स्ट्रीम पर HtmlDecode का उपयोग कैसे कर सकता हूं, और फिर भी इसे StreamReader ऑब्जेक्ट के रूप में रखता हूं।

क्या ऐसा करने का कोई तरीका है?

+0

ऐसा लगता है कि एक्सएमएल को एक्सएमएल रखने के बजाए अतिरिक्त समय एन्कोड किया गया है। डेटा पोस्ट करने वाला क्या है, और यह * क्या करना चाहिए? –

+0

ऐसा लगता है कि यह HTML एन्कोडिंग नहीं है, लेकिन यूआरएल एन्कोडेड स्ट्रिंग है। मुख्य प्रश्न - क्यों? क्या आप एक पक्ष को नियंत्रित करते हैं जो xml पोस्ट करता है? –

+0

@invisible - नहीं, मैं उस पक्ष को नियंत्रित नहीं करता जो xml – Steven

उत्तर

23

स्पष्ट रूप से ग्राहक सामग्री को यूआरएल-एन्कोडेड एक्सएमएल के रूप में भेज रहा है। तो अगर आप इस तरह की सामग्री को डिकोड करने की जरूरत है:

StreamReader stream = new StreamReader(Request.InputStream); 
string x = stream.ReadToEnd(); 
string xml = HttpUtility.UrlDecode(x); 

XDocument xmlInput = XDocument.LoadXml(xml); 

वैसे भी, समस्या क्लाइंट की तरफ शायद है ... क्यों यह एक्सएमएल इस तरह से एन्कोडिंग है?

+0

@Jcorretjer जो मैंने अपने उत्तर में सुझाया वह केवल ओपी के उपयोग के मामले में उपयोगी है। एक मनमानी फ़ाइल अपलोड पर इसका उपयोग करने का कोई मतलब नहीं है। –

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