2011-11-14 2 views
9

से कच्चे एचटीएमएल कैसे लौटा सकता हूं मेरे पास आरईएसटी सामग्री को संभालने के लिए वेबएपीआई का उपयोग कर एक विंडोज़ सेवा के रूप में चलने वाली एक स्वयं-होस्टेड डब्ल्यूसीएफ सेवा है और यह बहुत अच्छा काम करता है।मैं डब्लूसीएफ वेबएपीआई वेबगेट

मुझे एहसास है कि मुझे वास्तव में आईआईएस का उपयोग करना चाहिए या वास्तविक वेब पृष्ठों को डिश करने के समान होना चाहिए, लेकिन क्या "बस" एचटीएमएल वापस करने के लिए सेवा कॉल प्राप्त करने का कोई तरीका है?

यहां तक ​​कि मैं "BodyStye नंगे" निर्दिष्ट करते हैं तो मैं अभी भी वास्तविक HTML आसपास एक्सएमएल आवरण मिलता है, यानी

<?xml version="1.0" encoding="UTF-8"?> 
<string> html page contents .... </string> 


[WebGet(UriTemplate = "/start", BodyStyle = WebMessageBodyStyle.Bare)] 
public string StartPage() 
{ 
    return System.IO.File.ReadAllText(@"c:\whatever\somefile.htm"); 
} 

वहाँ यह करने के लिए या मैं छोड़ देना चाहिए कोई तरीका है?

उत्तर

16

बॉडीस्टाइल विशेषता का डब्लूसीएफ वेब एपीआई पर कोई प्रभाव नहीं पड़ता है। नीचे दिया गया उदाहरण काम करेगा। यह आवश्यक नहीं है कि यह करने का सबसे अच्छा तरीका है, लेकिन यह मानना ​​चाहिए कि मैंने कोई टाइपो नहीं बनाया है :-)।

[WebGet(UriTemplate = "/start")] 
public HttpResponseMessage StartPage() { 
    var response = new HttpResponseMessage(); 
    response.Content = new StringContent(System.IO.File.ReadAllText(@"c:\whatever\somefile.htm")); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html"); 
    return response; 
} 

यह शायद अधिक समझ बनाने के एक धारा के रूप में फ़ाइल को पढ़ने और StringContent के बजाय StreamContent उपयोग करने के लिए होगा। या यह आपके स्वयं के FileContent वर्ग को बनाने के लिए काफी आसान है जो फ़ाइल नाम को पैरामीटर के रूप में स्वीकार करता है।

और, स्वयं-होस्ट विकल्प आईआईएस का उपयोग करने के रूप में स्थिर HTML को वापस करने का एक व्यवहार्य तरीका है। कवर के तहत वे बिट्स वितरित करने के लिए एक ही HTTP.sys कर्नेल मोड ड्राइवर का उपयोग करते हैं।

+3

धन्यवाद ढेर, जो मुझे वहां लाने के लिए काफी करीब था, मुझे बस एक पंक्ति को "प्रतिक्रिया.कंटेंट.हेडर्स.कंटेंट टाइप = नया मीडिया टाइप टाइपर वैल्यू (" टेक्स्ट/एचटीएमएल "); " – Swordblaster

4

आपको एक फॉर्मेटर का उपयोग करना होगा जो सामग्री प्रकार के रूप में "टेक्स्ट/एचटीएमएल" स्वीकार करता है और आपके अनुरोध हेडर में सामग्री प्रकार "टेक्स्ट/एचटीएमएल" का अनुरोध करता है।

यदि आप टेक्स्ट/एचटीएमएल को संभालते हुए एक फॉर्मेटर नहीं जोड़ते हैं, तो वेब एपीआई एक्सएमएल-फॉर्मेटर को डिफ़ॉल्ट रूप से वापस आती है।

आपके मामले में फ़ॉर्मेटर को कुछ भी प्रारूपित करने की आवश्यकता नहीं है, लेकिन केवल अपना रिटर्न वैल्यू वापस कर दें क्योंकि आप पहले से स्वरूपित एचटीएमएल वापस कर रहे हैं।

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

  • कोई संबंधित समस्या नहीं^_^