क्या मार्ग है ।gnoreRoute ("{संसाधन} .axd / {* pathInfo}")


95

क्या है routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

मुझे अपनी परियोजना में कोई भी .axd फ़ाइल नहीं मिल रही है, क्या मैं इस रूट नियम को हटा सकता हूँ?

जवाबों:


81

.axd फाइलें भौतिक रूप से मौजूद नहीं हैं। ASP.NET, .axd एक्सटेंशन (ScriptResource.axd और WebResource.axd) के साथ आंतरिक रूप से URL का उपयोग करता है, और उन्हें एक HttpHandler द्वारा नियंत्रित किया जाता है।

इसलिए, आपको इस नियम को रखना चाहिए, ASP.NET MVC को समर्पित HttpHandler को यह बताने के बजाय अनुरोध को संभालने की कोशिश करने से रोकना चाहिए।


5
मुझे पूरा यकीन है कि आप चाहते हैं कि लोग आपकी साइट पर "axd files" डाउनलोड कर सकें क्योंकि उनमें जावास्क्रिप्ट और स्टाइल हैं।
मोलडे

3
यह उत्तर गलत है। IgnoreRouteMVC के रूटिंग कॉन्फ़िगरेशन में डालने का कारण यह सुनिश्चित करना है कि MVC अनुरोध को संभालने का प्रयास नहीं करता है। ऐसा इसलिए है क्योंकि स्क्रिप्ट की सेवा के लिए .axdएंडपॉइंट को दूसरे HTTP हैंडलर (एक हैंडलर जो MVC का हिस्सा नहीं है ) द्वारा नियंत्रित किया जाना चाहिए ।
नाइटऑवल 88

1
क्या यह .NET कोर में पूरी तरह से अनावश्यक है? मैंने एक या एक घंटे के लिए Google पर खोज की है और मुझे इसके लिए कोई संदर्भ नहीं मिल रहा है कि समतुल्य चरण क्या होंगे, इसलिए मैं मान रहा हूं कि इसकी आवश्यकता नहीं है।
डायनेडो

35

कुछ पृष्ठभूमि

यदि आप इस फ़ाइल को खोलते हैं:

%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...&amp;t=6342..." type="text/javascript"></script>

AssemblyResourceLoaderविधानसभा जहां जावास्क्रिप्ट क्वेरी स्ट्रिंग में जानकारी का उपयोग एम्बेडेड है खोजने के लिए और जावास्क्रिप्ट वापस आ जाएगी।


वापस प्रश्न पर

तो सवाल का जवाब देने के लिए, क्या है:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

यह रूटिंग इंजन को बता रहा है कि हम उन अनुरोधों को संसाधित नहीं करेंगे जो उस मार्ग पैटर्न से मेल खाते हैं। दूसरे शब्दों में, हम .axdअनुरोधों को संसाधित नहीं करेंगे । क्यों? क्योंकि MVC खुद के लिए इसी तरह एक HttpHandler है .axdऔर .aspxऔर कई अन्य संचालकों कि web.config फ़ाइल में हैं। MVC हैंडलर को यह नहीं पता है कि अनुरोध को कैसे संसाधित किया जाए जैसे कि असेंबली में एम्बेडेड संसाधनों की तलाश करना- AssemblyResourceLoaderजानता है कि यह कैसे करना है। एमवीसी जानता है कि कैसे करना है, अच्छी तरह से वह सब कुछ करता है जो इस सवाल और जवाब के दायरे से बाहर है।


2
यह निश्चित रूप से निश्चित रूप से स्वीकृत उत्तर होना चाहिए, साथ ही मुझसे एक।
याह्या

अंत में, WebResource.axd वास्तव में क्या करता है की एक स्पष्ट व्याख्या भी प्रश्न का स्पष्ट उत्तर प्रदान करती है। धन्यवाद
ben_mj

18

पैटर्न के साथ मार्ग {संसाधन} .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 ) का उपयोग कर सकते हैं



7

वे फाइलें नहीं हैं (वे डिस्क पर मौजूद नहीं हैं) - वे सिर्फ नाम हैं जिनके तहत कुछ HTTP हैंडलर्स पंजीकृत हैं।


सबसे अधिक प्रासंगिक उत्तर मैं कहूंगा।
सकथिवेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.