2010-06-21 10 views
30

निम्न चरणों का उपयोग:ASP.NET MVC eurl.axd त्रुटियों

(। मैं this similar post है, जो मेरी समस्या का समाधान नहीं होता जाँच की है)

  1. विंडोज सर्वर 2003/IIS6 के तहत, मैं एक बनाने "testapp" नामक नई साइट
  2. वीएस -2010 में, मैं एक नया एएसपी.नेट एमवीसी 2 एप्लिकेशन बनाता हूं।
  3. मैं निम्नलिखित कोड के साथ एक दृश्य "जानकारी" कहा जाता है जोड़ें:

    X-REWRITE-URL=/home/info/eurl.axd/e3299f29f8043d4f8a27e0f1d0c40971 
    
    :

    <h2>System</h2> 
    
    <h3>Request</h3> 
    
    <% 
        foreach (string key in Request.Headers) 
        { 
         Response.Write(string.Format("<p>{0}={1}</p>" 
           , key 
           , Request.Headers[key]) 
           ); 
        } 
    
    
    %> 
    

मानक हेडर के अलावा मैं इस एक को देखने के

मैंका उपयोग कर रहा हूं, जो "एक्स-रिवाइट-यूआरएल" हेडर उत्पन्न कर रहा है। जहां /eurl.axd?.... से आ रही है:

मेरे समस्या है? मैंने this article देखा है, लेकिन चूंकि यह एक नए ऐप पूल के साथ एक नए फ़ोल्डर में एक खाली ऐप है, इसलिए इस वेब फ़ोल्डर में कोई 2.0 नहीं है। * ऐप्स चल रहे हैं। किसी अन्य निर्देशिका आदि पर इंगित कोई वर्चुअल फ़ोल्डर्स नहीं हैं। साइट एएसपी.NET 4.0 के लिए कॉन्फ़िगर की गई है, जो सही तरीके से पंजीकृत है।

समस्या यह है कि eurl.axd मेरी MVC मार्गों में मानकों के साथ पंगा लेना कर रहा है।

"एएसपी.नेट 4.0 ब्रेकिंग चेंज" आलेख में विकल्प वास्तव में मेरे लिए काम नहीं करते हैं, क्योंकि इस ऐप में कोई 2.0 घटक नहीं हैं, और मुझे विस्तार रहित यूआरएल का उपयोग करने की आवश्यकता है।

अद्यतन मैंने अभी देखा है कि जीएसी में System.Web.MVC संस्करण 2.0.0.0 है। क्या इसे वीएस -2010 और 4.0 ढांचे की स्थापना के साथ 4.0 में अपडेट किया गया है?

कारण है कि मैं एक डिफ़ॉल्ट ASP.NET MVC 2 आवेदन के साथ इस त्रुटि दिखाई दे रही मुझे समझ नहीं आता। मदद!!

अद्यतन 2/2011 - समाधान हो

अंत में होने रजिस्ट्री हैक के माध्यम से extensionless यूआरएल को निष्क्रिय करने की कोशिश की, समस्या गायब हो गया। मैं इसे जवाबी सहज है कि extensionless यूआरएल को अक्षम करने में आता है extensionless यूआरएल काम (IIS6 में वाइल्डकार्ड मानचित्रण के साथ) मिल जाए, लेकिन मैं मैं क्या मिल सकता है ले लेंगे।

अद्यतन 12/2014

(मीरा | मुबारक | शांतिपूर्ण) (क्रिसमस | हनुका | क्वंज़ा | दिसंबर)।

मुझे लगता है कि हर दूसरे विंडोज अद्यतन रजिस्ट्री परिवर्तन nuked उल्लेख करना भूल गया। यह के रूप में अजीब समस्याओं जहां http://site.dom/bob के लिए एक अनुरोध विफल हो जाएगा, जबकि http://site.dom/bob/ कामयाब होने की दिखाई दिया। मज़े करो! (ध्यान दें स्लैश।)

उत्तर

43

यह extensionless यूआरएल आईआईएस 6 में डिफ़ॉल्ट रूप से ASP.NET v4 द्वारा नियंत्रित किया जा करने के लिए सक्षम करने के लिए माइक्रोसॉफ्ट के दृष्टिकोण का हिस्सा है।यह यहां ASPNET V4 Breaking Changes दस्तावेज़ में वर्णित है। (Eurl.axd के लिए उस दस्तावेज़ में खोजें)। यह केवल एएसपीएनईटी v4 के साथ होता है।

क्या होता है:

  1. aspnet_filter.dll, वैश्विक ISAPI फिल्टर कि ASPNET लागू करता है आने वाली प्रत्येक यूआरएल का निरीक्षण (वेब ​​साइटों फ़ोल्डर> गुण यह देखने के लिए राइट क्लिक करें)। उन यूआरएल के लिए जिनके पास कोई एक्सटेंशन नहीं है, एएसपीएनईटी तब यूआरएल को /eurl.axd/some-long-number डालने के लिए उलझाता है। असल में लंबी संख्या कोई डैश नहीं है।

  2. आपका यूआरएल रीराइटर, एक साइट-विशिष्ट आईएसएपीआई फ़िल्टर, आगे चलता है और उलझन में यूआरएल देखता है। अपने नियम है कि अजीब उन्हें में इंजेक्शन अनुक्रम के साथ यूआरएल की उम्मीद नहीं है क्योंकि, आपका रीराइट फिल्टर यह ठीक से संभाल नहीं है, और उपयोगकर्ता शायद एक 404.

यह किसी भी पुनः लेखन के फिल्टर के साथ क्या होगा के साथ समाप्त होता है - हेलिकॉन ISAPI_Rewrite, आईआईआरएफ, आदि - जब आईआईएस 6 और एएसपीएनईटी v4 के साथ स्थापित किया गया। यह अन्य आईएसएपीआई फ़िल्टरों के साथ भी हो सकता है - वे जो स्पष्ट रूप से पुनर्लेखक नहीं हैं।

क्या माइक्रोसॉफ्ट इरादा होने की:

  1. aspnet_filter.dll ISAPI फिल्टर एक extensionless यूआरएल के लिए /eurl.axd/some-long-number कहते हैं। (यदि यूआरएल में इसका विस्तार है, तो यह इसे अकेले छोड़ देता है, प्रबंधित कोड को मारने से प्रदर्शन हिट को बचाता है।) यह सिर्फ ".axd" प्राप्त करने के लिए है, इसलिए आईआईएस 6, इसकी डिफ़ॉल्ट कॉन्फ़िगरेशन में, aspnet_isapi.dll ISAPI पर मैप करेगा विस्तार (आवेदन)।

  2. aspnet_isapi.dll ISAPI आवेदन अनुरोध को चुनता है, /eurl.axd/some-long-number को हटाने के द्वारा यूआरएल unmangles, और extensionlesses यूआरएल को संभालने के लिए तैयार किया गया है ASP.NET कोड को पास कर देता। वह कोड अनुरोध को संभालता है और यह महसूस नहीं करता है कि /eurl.axd/some-long-number shenanigans कभी हुआ।

माइक्रोसॉफ्ट विचार करने के लिए क्या यूआरएल निरीक्षण ISAPI फिल्टर कि चरण 1 और 2. ASP.NET 4 रिलीज नोट्स के बीच बैठना जिसके कारण त्रुटि के बारे में नेट एक नोट 2.0 अनुप्रयोग के लिए क्या होगा विफल हो गया; यह सिर्फ एक ही तरीका हो सकता है।

  • बस इसे बंद करने के रजिस्ट्री कुंजी का उपयोग करें:

    आप कुछ विकल्प हैं। HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0> DWORD EnableExtensionlessUrls से 0, फिर आईआईएस को पुनरारंभ करें।

  • Do यूआरएल ASP.NET पाइपलाइन के भीतर फिर से लिखने। (जाहिर है आप केवल इस मामले में प्रबंधित अनुरोधों को फिर से लिख सकते हैं।)

  • aspnet_filter.dll से अधिक प्राथमिकता पर अपने आईएसएपीआई फ़िल्टर यूआरएल रीराइटर को वैश्विक स्तर पर स्थापित करें। मुझे दर्द की तरह लगता है।

  • कॉन्फ़िगर वेबसाइट बल्कि ASPNET v4 से, ASPNET वी 2 उपयोग करने के लिए।

  • अपने rewriter में एक नियम सम्मिलित पूरी तरह से EURL साथ यूआरएल की अनदेखी करने के।उनमें ax ax। यह रूप में सरल रूप में
    RewriteRule eurl\.axd -

मैं रजिस्ट्री कुंजी का उपयोग हो सकता है और यह मेरे लिए ठीक काम करता है।

गुड लक!

अद्यतन 2011-08-10: ऐसा प्रतीत होता है कि .NET Framework की सेवा करने वाले Windows अद्यतन रजिस्ट्री कुंजी को रीसेट करते हैं, और इसे पुन: लागू करना होगा।

संपादित करें 2012-02-17 हमें यह समस्या थी और हमारी टीम ने इस समस्या को दफन करने से पहले समस्या का समाधान करने में कई घंटे बिताए, इससे पहले कि हमारे लिए समाधान पूरा हो गया। "ध्यान दें कि Wow64 (यानी 32-बिट कार्यकर्ता प्रक्रिया 64-बिट ओएस पर चल रही है) के लिए, यह रजिस्ट्री कुंजी HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ Wow6432Node \ Microsoft \ ASP.NET \ 4.0.30319.0 \ EnableExte nsionlessUrls पर सेट की जानी चाहिए।"

+0

विस्तृत प्रतिक्रिया के लिए धन्यवाद। प्रश्न, हालांकि - विस्तारित यूआरएल को एमवीसी रूटिंग में हस्तक्षेप नहीं कर रहा है? –

+0

मेरे एमवीसी मार्गों में ".aspx" होता है, लेकिन एएसपी.NET ISAPI एप्लिकेशन में मैप किए गए किसी भी "कुछ" काम करेगा। उदा।, "/store.aspx/controller/action/id" –

+0

मुझे जोड़ना चाहिए ... आप अभी भी वाइल्डकार्ड मैपिंग का उपयोग कर विस्तारित यूआरएल रख सकते हैं ताकि सब कुछ एएसपी.नेट आईएसएपीआई एप्लीकेशन के माध्यम से हो। इस तरह लोगों ने इसे वी 2 में किया था। लेकिन यह perf प्रभाव पड़ा था। फ़िल्टर के साथ वी 4 के लिए बनाई गई योजना आईआईएस 6 में विस्तारित यूआरएल को एक उच्च perf तरीके से काम करने का प्रयास था, क्योंकि केवल विस्तारित यूआरएल को .axd प्राप्त करने के लिए फिर से लिखा गया है, और सबकुछ एएसपी पर नहीं जाना होगा। नेट आईएसएपीआई आवेदन। यदि आईएसएपीआई आधारित यूआरएल जैसे उपकरणों के माध्यम से पुनः लिखना आपके लिए महत्वपूर्ण नहीं है, तो आप डिफ़ॉल्ट रूप से स्वीकार कर सकते हैं। –

17

मैं पर ASP.NET 4पर चल रहा है वेब साइटों के लिए Ionics ISAPI Rewriter साथ पहले नियम के रूप में निम्नलिखित regex का उपयोग IIS 6breaking change की वजह से समस्याओं उपाय करने ASP.NET के साथ शुरू की 4:

RewriteRule ^(.*)/eurl.axd/[a-f0-9]{32}(.*)$ $1$2 

यह मुझे फिर से विस्तारित यूआरएल का उपयोग करने देता है।

ध्यान दें कि दूसरा समूह क्वेरीस्ट्रिंग को कैप्चर करता है और इसे फिर से लिखने वाले यूआरएल में प्रतिबंधित करता है।

और हाँ, यह a feature, not a bug है।

+1

ग्रेट क्लीन समाधान! – cspolton

+1

यह हमारे लिए हेलिकॉन ISAPI_REWRITE के साथ भी काम करता है। हमने एनसी ध्वज जोड़ा: – palehorse

+0

बिल्कुल सही !! धन्यवाद – jaywon

1

मैं एक समान मुद्दे में भाग गया और हमारे आईएसएपीआई रीवाइट मॉड्यूल प्रदाता के माध्यम से एक समाधान मिला। मैंने खोज और समाधान दस्तावेज किया: http://www.vanadiumtech.com/OurBlog/post/2011/08/12/Cause-of-eurlaxd.aspx