जवाबों:
.axd फाइलें भौतिक रूप से मौजूद नहीं हैं। ASP.NET, .axd एक्सटेंशन (ScriptResource.axd और WebResource.axd) के साथ आंतरिक रूप से URL का उपयोग करता है, और उन्हें एक HttpHandler द्वारा नियंत्रित किया जाता है।
इसलिए, आपको इस नियम को रखना चाहिए, ASP.NET MVC को समर्पित HttpHandler को यह बताने के बजाय अनुरोध को संभालने की कोशिश करने से रोकना चाहिए।
IgnoreRoute
MVC के रूटिंग कॉन्फ़िगरेशन में डालने का कारण यह सुनिश्चित करना है कि MVC अनुरोध को संभालने का प्रयास नहीं करता है। ऐसा इसलिए है क्योंकि स्क्रिप्ट की सेवा के लिए .axd
एंडपॉइंट को दूसरे HTTP हैंडलर (एक हैंडलर जो MVC का हिस्सा नहीं है ) द्वारा नियंत्रित किया जाना चाहिए ।
कुछ पृष्ठभूमि
यदि आप इस फ़ाइल को खोलते हैं:
%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config
आपको यह फ़ाइल के भीतर मिलेगा:
<add path="WebResource.axd"
verb="GET"
type="System.Web.Handlers.AssemblyResourceLoader"
validate="True" />
यह मूल रूप से Asp.NET रनटाइम बता रहा है: "अरे asp.net दोस्त, अगर WebResource.axd के लिए कोई अनुरोध आता है, तो अनुरोध को संसाधित करने के लिए असेंबलीResourceLoader का उपयोग करें।"
कृपया ध्यान दें कि WebResource.axd एक फ़ाइल नहीं है, लेकिन बस एक नक्शा (यदि मैं कह सकता हूं) AssemblyResourceLoader
। यह वह नाम है जिसके तहत हैंडलर पंजीकृत है। मेरी मशीन पर, मुझे निम्नलिखित .axd हैंडलर मिले:
<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd"
ठीक है, तो उस हैंडलर क्या करता है?
यह AssemblyResourceLoader
जानता है कि असेंबली के भीतर एम्बेडेड फ़ाइलों की तलाश कैसे की जाए ताकि वह इसे सेवा दे सके (ग्राहक को भेजें यानी ब्राउज़र)। उदाहरण के लिए, asp.net वेब रूपों में, यदि आप सत्यापन नियंत्रण का उपयोग करते हैं, तो वे वेब पेज पर त्रुटियों को दिखाने के लिए कुछ जावास्क्रिप्ट पर निर्भर करते हैं। हालाँकि, उस जावास्क्रिप्ट को असेंबली में एम्बेड किया गया है। ब्राउज़र को जावास्क्रिप्ट की आवश्यकता होती है ताकि आप इसे पृष्ठ के HTML में देखेंगे:
<script src="/YourSite/WebResource.axd?d=fs7zUa...&t=6342..." type="text/javascript"></script>
AssemblyResourceLoader
विधानसभा जहां जावास्क्रिप्ट क्वेरी स्ट्रिंग में जानकारी का उपयोग एम्बेडेड है खोजने के लिए और जावास्क्रिप्ट वापस आ जाएगी।
वापस प्रश्न पर
तो सवाल का जवाब देने के लिए, क्या है:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
यह रूटिंग इंजन को बता रहा है कि हम उन अनुरोधों को संसाधित नहीं करेंगे जो उस मार्ग पैटर्न से मेल खाते हैं। दूसरे शब्दों में, हम .axd
अनुरोधों को संसाधित नहीं करेंगे । क्यों? क्योंकि MVC खुद के लिए इसी तरह एक HttpHandler है .axd
और .aspx
और कई अन्य संचालकों कि web.config फ़ाइल में हैं। MVC हैंडलर को यह नहीं पता है कि अनुरोध को कैसे संसाधित किया जाए जैसे कि असेंबली में एम्बेडेड संसाधनों की तलाश करना- AssemblyResourceLoader
जानता है कि यह कैसे करना है। एमवीसी जानता है कि कैसे करना है, अच्छी तरह से वह सब कुछ करता है जो इस सवाल और जवाब के दायरे से बाहर है।
पैटर्न के साथ मार्ग {संसाधन} .axd / {* pathInfo} वेब संसाधन फ़ाइलों जैसे WebResource.axd या ScriptResource.axd को एक नियंत्रक से पारित होने से रोकने के लिए शामिल किया गया है।
लिंक पढ़ें: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx
आप यह भी निर्दिष्ट कर सकते हैं कि रूटिंग को कुछ URL अनुरोधों को संभालना नहीं चाहिए। आप रूट को परिभाषित करके कुछ अनुरोधों को संभालने से रोकते हैं और निर्दिष्ट करते हैं कि StopRoutHandler वर्ग का उपयोग उस पैटर्न को संभालने के लिए किया जाना चाहिए। जब एक अनुरोध StopRoutHandler ऑब्जेक्ट द्वारा नियंत्रित किया जाता है , तो StopRoutHandler ऑब्जेक्ट मार्ग के रूप में अनुरोध के किसी भी अतिरिक्त संसाधन को अवरुद्ध करता है। इसके बजाय, अनुरोध को ASP.NET पृष्ठ, वेब सेवा, या अन्य ASP.NET समापन बिंदु के रूप में संसाधित किया जाता है। आप StopRoutHandler वर्ग का उपयोग करने वाले मार्गों को बनाने के लिए RouteCollection.Ignore विधि (या RouteCollectionExtensions.IgnoreRoute ) का उपयोग कर सकते हैं ।
नीचे दिए गए लिंक पर एक नज़र डालें: http://haacked.com/archive/2008/07/14/make-rout-ignore-requests-for-a-file-extension.aspx
वे फाइलें नहीं हैं (वे डिस्क पर मौजूद नहीं हैं) - वे सिर्फ नाम हैं जिनके तहत कुछ HTTP हैंडलर्स पंजीकृत हैं।