2010-04-21 29 views
6

यदि मेरे पास एक स्थिर संसाधन के लिए मेरे एएसपी.नेट एमवीसी 1 (या 2) वेब ऐप में संसाधन के लिए अनुरोध है, तो कहें ... एक छवि या जावास्क्रिप्ट फ़ाइल या एक सीएसएस फ़ाइल ... .NET फ्रेमवर्क प्रयास करता है और देखता है कि अनुरोध मार्ग सूची से मेल खाता है ... और अंत में इसके लिए नियंत्रक नहीं मिल रहा है?एएसपी.नेट एमवीसी रूटिंग और स्थिर डेटा (यानी छवियां, स्क्रिप्ट, आदि)

उदाहरण के लिए।

संसाधन: /Content/Images/Foo.png

इस अनुरोध को .. मेरी मार्ग सूची के माध्यम से जाना है इस अनुरोध के लिए किसी भी नियंत्रक/कार्रवाई मैच के लिए और फिर उस पथ का प्रयास सीधे विफल रहता है?

उत्तर

7

आप किसी मौजूदा फ़ाइल को मैप करने के लिए या RouteCollection.RouteExistingFiles संपत्ति

हो जाता है या एक मूल्य है कि इंगित करता है कि ASP.NET मार्ग URL हैं, जो किसी मौजूदा फ़ाइल से मेल संभाल चाहिए सेट की स्थापना नहीं चुन सकते हैं।

यहाँ मैं क्या here से पढ़ा है:

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

, तो इसके बजाय, आप अपने रूटिंग कॉन्फ़िगरेशन डिस्क पर फ़ाइलों को प्राथमिकता से ले जाना चाहते हैं, तो आप सही पर RouteCollection के RouteExistingFiles गुण सेट कर सकते हैं। (यह डिफ़ॉल्ट रूप से गलत है।)

+0

तो आपकी कहानियां क्या है, यह पहली बार डिस्क पर फ़ाइल ढूंढने का प्रयास करती है (उदाहरण के लिए foo.png, something.js, some.ico, जो भी हो)। अगर ऐसा करने में विफल रहता है, तो यह रूटिंग सिस्टम में आता है। तो जब तक यह मेरे अपने आईसींट्रोलर फैक्ट्री (उदाहरण के लिए) में प्रवेश करता है, यह माना जाता है कि संसाधन डिस्क पर भौतिक रूप से मौजूद नहीं है। अंत में, यह डिफ़ॉल्ट कॉन्फ़िगरेशन सेट (यानी RouteExistingFiles = false) के लिए है। –

+0

हां, यह सही है –

0

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

यदि आप सामग्री फ़ोल्डर के गुण (आईआईएस प्रबंधक में) देखते हैं, तो इसे वर्चुअल निर्देशिका के रूप में बनाएं, फिर वाइल्डकार्ड मैपिंग को हटा दें। फिर सामग्री फ़ोल्डर को एक सामान्य निर्देशिका में सेट करें। इसके बाद इन फ़ाइलों को aspnet_isapi हैंडलर द्वारा संभाला जा रहा अनुरोधों को रोकना चाहिए।

1

डिफ़ॉल्ट रूप से रूटिंग इंजन सर्वर पर भौतिक रूप से मौजूद सभी फ़ाइलों के लिए रूट मैप्स को अनदेखा कर देगा। संक्षेप में, आपको स्थिर फ़ाइलों से लिंक करने के लिए एमवीसी ऐप के लिए कुछ भी करने की ज़रूरत नहीं है।

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