मैंने अभी सर्विसस्टैक का उपयोग करना शुरू कर दिया है जो एक अद्भुत लाइब्रेरी है।सर्विसस्टैक और एक स्ट्रीम लौट रहा है
हालांकि, मेरे पास एक व्यावसायिक आवश्यकता है जहां हमें xml और json वापस करना होगा जहां xml विशिष्ट प्रारूप में होना चाहिए। विशेषताओं का एक गुच्छा
<service name="service1" type="audio" .../>
तो मूल रूप से:
उदाहरण के लिए हम ग्राहकों है कि प्रारूप के एक्सएमएल उम्मीद मौजूदा है।
मुझे पता है कि सर्विसस्टैक डीटीओ की अवधारणाओं का उपयोग करता है और DataContractSerializer का उपयोग करता है जो xml विशेषताओं के साथ उपरोक्त रूप में xml तत्व देता है।
मैं अभी भी अनुरोध (स्वीकार करें शीर्षक में आवेदन/xml या application/json में गुजर) के लिए DTOs उपयोग करने के लिए और मैं तो अपने ही एक्सएमएल तार या json तार बना सकते हैं और फिर उन्हें के रूप में वापसी चाहते हैं:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
जहां परिणाम स्ट्रिंग एक एक्सएमएल स्ट्रिंग या जेसन स्ट्रिंग हो सकती है।
मैंने फिडलर में प्रतिक्रिया सामग्री प्रकार को टेक्स्ट/एचटीएमएल के रूप में देखा।
जिस दृष्टिकोण के साथ मैं उपयोग कर रहा हूं, क्या मैं किसी भी आरईएसटी सिद्धांतों का उल्लंघन कर रहा हूं? क्या सामग्री-प्रकार के साथ समस्याएं हैं क्योंकि यह वर्तमान में है (टेक्स्ट/एचटीएमएल)?
यदि मैं इस दृष्टिकोण का उपयोग करता हूं तो यह व्यावसायिक आवश्यकताओं को हल करता है।
संपादित
मैंने पाया कि मैं एक httpResult लौट सकते हैं के रूप में:
return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
जो सही सामग्री प्रकार देता है।
तो, क्या यह सही तरीका है या अगर मैं इस मार्ग से नीचे जाऊं तो क्या मुझे समस्याएं होंगी?
मदद के लिए धन्यवाद। –
क्या स्ट्रीम के बजाए स्ट्रिंग लौटने में कोई फायदा होगा? –
नहीं, दोनों सीधे एएसपी.नेट के एचटीपी रेस्पॉन्स आउटपुटस्ट्रीम पर लिखे जाते हैं। इसलिए मेमोरीस्ट्रीम का उपयोग करना (यदि आपके पास पहले से मेमोरी में स्ट्रिंग है) अतिरिक्त ओवरहेड जोड़ता है। जब आप आउटपुट स्ट्रीम करना चाहते हैं तो एक स्ट्रिंग को वापस करना समझदारी है (यानी स्मृति में पूरी प्रतिक्रिया लोड करने से बचें) – mythz