2008-12-13 11 views
18

ऐप में मैं काम कर रहा हूं, मैं उपयोगकर्ता को डिफ़ॉल्ट "उपयोगकर्ता प्रोफ़ाइल" एमवीसी व्यू पेज को प्रतिस्थापित करने के लिए स्थिर HTML पृष्ठों को अपलोड करने की अनुमति देना चाहता हूं। क्या यह संभव है? यही है, उपयोगकर्ता अपलोड किए गए एचटीएमएल पेज पूरी तरह से एमवीसी से बाहर हो जाएंगे, और इसमें अपने स्वयं के सीएसएस लिंक शामिल हो सकते हैं, आदिएएसपी.नेट एमवीसी: एमवीसी अनुप्रयोगों में स्थिर HTML पृष्ठों का उपयोग कैसे करें?

विचार? सुझाव?

उत्तर

22

जाहिर है .नेट एमवीसी फ्रेमवर्क छवियों/सीएसएस/जेएस इत्यादि के लिए पहले से ही स्थिर सामग्री को संभालता है। यह केवल (आईआईटीएस) को सीधे आईआईएस के माध्यम से पास करने के लिए उस (रूटिंग?) को विस्तारित करने का मामला होगा। सुंदर यूआरएल बनाने के लिए पुनः लिखने के डैश के साथ यह चाल चलनी चाहिए।

हालांकि, मैं कच्चे HTML अपलोड के रूप में उपयोगकर्ता जेनरेटेड सामग्री को अनुमति देने की बहुत सावधान रहूंगा क्योंकि आप एक बहुत ही व्यापक दरवाजा खोल रहे हैं। सबसे अच्छा, आप स्पैम/अश्लील/विज्ञापन से भरे लोगों के पृष्ठों के साथ हवा में जा रहे हैं। सबसे बुरी स्थिति में, आप लोगों के लिए क्रॉस-साइट स्क्रिप्टिंग हैक अपलोड करने और संभावित रूप से दुर्भावनापूर्ण सामग्री को अपलोड करने के लिए गेटवे प्रदान करेंगे। आसानी से आपकी साइट पर एक मौजूदा रूप ले सकता है, उसमें जंक का एक भार हार्डकोड कर सकता है, और इसे अपने होमपेज से निष्पादित कर सकता है और चीजों का पूरा ढेर तोड़ सकता है।

कम से कम आपको अपलोड की गई सामग्री को केवल सामग्री के एक ब्लॉक तक कम करने के लिए पार्स करना चाहिए, और उसके बाद इसे अपने आप में लपेटना चाहिए। मैं व्यक्तिगत रूप से उपयोगकर्ताओं को एक अच्छा WYSIWYG प्रदान करने के इच्छुक हूं सामग्री के एक ब्लॉक को संपादित करने के लिए संपादक - इसके नमक के किसी भी संपादक को आपको स्वच्छता प्रदान करना चाहिए क्योंकि इसमें कौन से तत्व शामिल हैं/बहिष्कृत हैं। फिर अपने डेटाबेस/डिस्क पर इस सामग्री के टुकड़े को स्टोर करें और एक होमपेज के लिए एक मानक एमवीसी नियंत्रक मार्ग के माध्यम से अनुरोध करें और उस सामग्री को लोड करें।


संपादित करें - आप आप अपने मार्ग के लिए एक पर ध्यान न दें नियम जोड़ने के लिए सक्षम होना चाहिए उदाहरण के लिए अनुरोध के लिए - दरार अपने Global.asax फ़ाइल को खोलने - - आप चाहते हैं वहाँ शायद पहले से ही के इन पहले से ही उदाहरण हो जाएगा routes.IgnoreRoute विधि के लिए एक कॉल में डाल:

routes.IgnoreRoute("UserPages/{*path}"); 

आईआईएस जाने चाहिए yourwebsite.com/UserPages/aUser/homepage.html के लिए सभी अनुरोधों को संभालने - आप भी वाइल्ड कार्ड के टुकड़े के साथ और अधिक थोड़ा के बारे में खेल सकते हैं/सुंदर समाधान के लिए बाधाएं

0

मैं आपको अपना कस्टम व्यूइंजिन बनाने का सुझाव देता हूं जो इसमें कस्टम टैग के साथ स्थिर HTML मार्कअप का उपयोग करने की अनुमति देगा, जिसे उपयोगकर्ता जानकारी द्वारा प्रतिस्थापित किया जाएगा।

तो, आपके विचार इंजन ऐसा ही कुछ स्वीकार कर सकते हैं:

<html> 
    <body> 
     <b><user:FirstName /></b> 
     <b><user:LastName /></b> 
    </body> 
</html> 

और

<html> 
    <body> 
     <b>First Name</b> 
     <b>Last Name</b> 
    </body> 
</html> 

उत्पादन यह कस्टम मार्कअप आप, डेटाबेस में स्टोर कर सकते हैं, उदाहरण के लिए। आप MVC Contrib project पर कस्टम व्यूइंजिन कार्यान्वयन पर एक नज़र डाल सकते हैं।

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