2012-07-03 12 views
5

का निवेदन मैं एक विरासत आवेदन :) करने के लिए कुछ नया जीवन जोड़ने की जरूरत हैआह्वान ASP.NET MVC नियंत्रक जब .html फ़ाइल

मैं जब एक "स्थिर" HTML पृष्ठ में अनुरोध किया गया है एक MVC नियंत्रक कॉल करना चाहते हैं क्लाइंट को लौटने से पहले पेज पर कुछ मार्कअप जोड़ने का ऑर्डर करें।

मैं दृष्टिकोण इस सूत्र में पाया अनुसरण करने की कोशिश: How to read web.config settings in .html page?

... लेकिन फिर भी मैं इस मार्ग में परिभाषित किया गया है:

routes.MapRoute(
    name: "Topic", 
    url: "html/{fileName}.html", 
    defaults: new { controller = "Topic", action = "Index" }); 

नियंत्रक नहीं बुलाया जा रहा है। मैं अपने web.config के साथ परिभाषित किया है:

<remove name="WebServiceHandlerFactory-Integrated" /> 
<add name="HTML" path="*.html" verb="*" 
    type="System.Web.UI.PageHandlerFactory" 
    resourceType="File" preCondition="integratedMode" /> 

मुझे लगता है कि मैं PageHandlerFactory या शायद इस मुद्दे को कुछ पूरी तरह से अलग है के अलावा कुछ और कॉल करने के लिए की जरूरत है।

अद्यतन: मेरा देव पर्यावरण एकीकृत पाइपलाइन मोड के साथ काम कर रहा है, लेकिन मुझे यह जांचना होगा कि मेरा उत्पादन वातावरण इसका समर्थन करेगा या नहीं।

+3

क्या आप आईआईएस 7 + एकीकृत पाइपलाइन मोड में चल रहे हैं? –

उत्तर

6

आप ऐसा करते हैं:

routes.RouteExistingFiles = true; 

आप इस काम करता है चाहिए - यहां तक ​​कि हैंडलर इसके बिना। नियंत्रक में आप HostingEnvironment.VirtualPathProvider की GetFile विधि का उपयोग करके सीधे HTML लोड कर सकते हैं और इसके साथ कुछ कर सकते हैं - या बेहतर अभी भी एक सामान्य एमवीसी व्यू का उपयोग करें जो स्थिर सामग्री के समान सामग्री को आपके जोड़ों के साथ प्रस्तुत करता है।

हालांकि इस बात से अवगत रहें कि इसका मतलब है कि किसी भी मार्ग से संभावित रूप से पकड़े गए किसी भी फाइल को एमवीसी पाइपलाइन में धकेल दिया जाएगा। यह आमतौर पर एक चिंता नहीं है, हालांकि, अगर मार्गों और भौतिक पथों का सभ्य पृथक्करण किया जाता है।

+0

प्रश्न का वास्तविक जवाब एंड्रस और स्कॉट ने सुझाव दिया है कि दोनों को करना है। मैंने मार्गों (प्रति एंड्रस) के साथ और बिना वेब और कॉन्फ़िगरेशन सेटिंग्स (प्रति स्कॉट) के साथ और बिना दोनों के परीक्षण किए और दोनों को यह करने के लिए आवश्यक है कि मैं इसे करने की कोशिश कर रहा हूं। धन्यवाद दोस्तों! –

+0

मैंने कुछ स्थिर सामग्री को एप्लिकेशन खोलने के लिए कुछ इग्नोर रूट नियम जोड़े हैं जिन्हें सर्वर द्वारा प्रोसेसिंग की आवश्यकता नहीं है। –

+0

हाँ यह एक अच्छा विचार है :) –

3

मैंने आपके जैसा ही स्थिति स्थापित की है और यह मेरे लिए अच्छा काम करता है, इसलिए आपके पास महत्वपूर्ण घटक हैं। कुछ बातें परीक्षण और समस्या निवारण के लिए ध्यान में रखना:

आपका web.config एचटीएमएल विस्तार के लिए निर्माण प्रदाता की आवश्यकता है:

<system.web> 
    <compilation> 
     <buildProviders> 
     <add extension=".html" 
      type="System.Web.Compilation.PageBuildProvider" /> 
     </buildProviders> 
    </compilation> 
</system.web> 

एक प्रति और अपने संचालकों का पेस्ट मेरे लिए काम करता है, ताकि अच्छा लग रहा है।

और आपके MapRoute की एक कॉपी और पेस्ट भी मेरे लिए काम करता है, हालांकि मैंने एक स्वच्छ प्रोजेक्ट में डिफ़ॉल्ट होम नियंत्रक का उपयोग किया था। तो एक डबल चेक के रूप में बस पुष्टि करें कि आपके पास इंडिक() नामक एक्शन रीसेट विधि के साथ विषय नामक नियंत्रक है।

और सुनिश्चित करें कि आपका यूआरएल localhost.com है: urport}/html/test.html पथ में/html/पथ के साथ, क्योंकि आपका नियम उस के लिए पूछता है।

एक और अच्छा परीक्षण है कि आप अपने मैप रूट को एएसपीएक्स का उपयोग करें और एएसपीएक्स पेज का परीक्षण करें और देखें कि यह काम करता है या नहीं। यह पुष्टि करेगा कि आईआईएस मैपिंग है या नहीं, या यह एमवीसी नियम है या नहीं। यदि यह एएसपीएक्स के साथ काम करता है तो समस्या हैंडलर से संबंधित है, लेकिन अगर यह एएसपीएक्स के साथ भी विफल हो जाती है तो यह एमवीसी के साथ कुछ है।

यह भी पुष्टि करें कि आप आईआईएस एक्सप्रेस का उपयोग कर रहे हैं और कैसिनी नहीं। कैसिनी सही तरीके से संभाल नहीं पाएगी, लेकिन आईआईएस एक्सप्रेस होगा। आप अपनी परियोजना पर राइट-क्लिक करके पुष्टि कर सकते हैं और आपको "विजुअल स्टूडियो डेवलपमेंट स्टूडियो ..." नामक मेनू विकल्प देखना चाहिए। यह केवल तभी अस्तित्व में होगा यदि आप वर्तमान में आईआईएस एक्सप्रेस का उपयोग कर रहे हैं।

+0

मुझे नहीं लगता कि अगर आप एमवीसी नियंत्रक को मारने का अनुरोध चाहते हैं तो यह मदद करता है - पृष्ठ को सीधे निष्पादित नहीं किया जाएगा, क्योंकि इसका उद्देश्य पृष्ठबिल्डप्रोवाइडर का उपयोग किया जाता है, लेकिन इसके बजाय अनुरोध एमवीसी को पास किया जाना है नियंत्रक, जो '.html' एक्सटेंशन –

+0

@Andras Zoltan के साथ एक यूआरएल की * ओर * * पर एक दृश्य प्रस्तुत करना (एएसपीएक्स हो सकता है, रेज़र या जो कुछ भी हो सकता है), आप सही हैं, मौजूदा फाइल के लिए लेखांकन आपको मार्ग जोड़ने की जरूरत है। रूटएक्सस्टिंगफाइल = आपके उत्तर से सच है। –

+0

जैसा कि मैंने ऊपर बताया है, मेरे लिए कामकाजी फिक्स स्कॉट और एंड्रस दोनों की प्रतिक्रिया को एकीकृत करना था। मुझे एक चुनना पड़ा, इसलिए मैंने एंड्रेस को जवाब के रूप में चिह्नित किया क्योंकि उन्होंने मार्ग कॉन्फ़िगरेशन में पॉइंटर जोड़ा जो इस प्रश्न में शामिल नहीं था या जिसे मैंने मूल रूप से लिंक किया था। –

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