2013-06-02 3 views
13

स्थिर फ़ाइल सेवा और एक नियंत्रक के लिए रास्ते में करने के लिए इस तरह के अनुरोध की जरूरत है की कोशिश करता है मार्ग मैं कॉन्फ़िगर किया है:MVC4 में विस्तार से काम नहीं करेगा के साथ एक यूआरएल रूटिंग, मैं MVC4 उपयोग कर रहा हूँ

routes.MapRoute(
      name: "Data", 
      url: "Data/{file}", 
      defaults: new { controller = "Data", action = "fileinfo"} 
     ); 

अब, यह पूरी तरह से ठीक काम करता है और मार्गों अनुरोध मेरी DataController करने के लिए यदि यूआरएल .xml एक्सटेंशन शामिल नहीं है, लेकिन जैसे ही एक विस्तार प्रयोग किया जाता है, आईआईएस तक सेवा करने की कोशिश करता है एक स्थिर फ़ाइल (मेरे नियंत्रक को रूट करने के बजाय) और मुझे 404 त्रुटि मिलती है।

मैंने इस मुद्दे के बारे में ऑनलाइन प्रश्न/उत्तर पढ़े हैं, और मैंने जो भी समाधान किया है, वह असफल रहा है।

उदाहरण के लिए, मैंने अपने रूटकोलेक्शन को कॉन्फ़िगर करते समय RouteExistingFiles = true का उपयोग करने का प्रयास किया है, और मैंने web.config में <modules runAllManagedModulesForAllRequests="true" /> जोड़ा है, लेकिन इसका कोई फायदा नहीं हुआ है।

अगर किसी को पता है कि मुझे क्या करना चाहिए या मैं क्या खो सकता हूं, तो इसकी सराहना की जाएगी। मैं एएसपी नेट 4.5, वीएस 2012 और आईआईएस 8.0 का उपयोग कर रहा हूं।

उत्तर

10

आप <system.webServer><handlers> अनुभाग में अपने web.config को यह जोड़ सकते हैं:

<add name="ManagedDllExtension" 
    path="data/fileinfo.xml" 
    verb="GET" type="System.Web.Handlers.TransferRequestHandler" 
    preCondition="integratedMode,runtimeVersionv4.0" /> 

आपका मार्ग

routes.MapRoute(
     name: "Data", 
     url: "Data/fileinfo.xml", 
     defaults: new { controller = "Data", action = "fileinfo"} 
    ); 

होगा वहाँ भी <modules runAllManagedModulesForAllRequests="true"> है लेकिन यह MVC4 के लिए काम करने के लिए प्रतीत नहीं होता/आईआईएस 8 (एमवीसी 3/आईआईएस 7 आईआईआरसी में ठीक था)। अधिक जानकारी here। इसके साथ एक प्रदर्शन प्रभाव भी है क्योंकि प्रत्येक अनुरोध प्रबंधित पाइपलाइन के माध्यम से मार्ग जाएगा।

HTH

+1

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

+0

इस बीच, मुझे एक संभावित कामकाज मिला है (सुंदर नहीं हो सकता है, लेकिन यह काम करता है)। मैं global.asax.cs में /data/fileinfo.xml को पकड़ रहा हूं और एक्सटेंशन को ट्रिम करने के लिए Context.RewritePath() का उपयोग कर रहा हूं। फिर रूटिंग ठीक से काम करने में सक्षम है। आपकी मदद के लिए धन्यवाद। – user2445698

+0

आह यह दयालु है - मेरी मशीन पर पूरी तरह से काम किया :-)। सुनने के लिए खुशी हुई कि आपको एक कामकाज मिला है। आप बाद की तारीख में हमेशा प्रतिक्रिया कर सकते हैं! –

0

मैं एएसपी MVC 4. के साथ एक ही मुद्दा था web.config syste.webserver.handlers खंड में मैं अगले कोड मिला:

<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 

सभी अनुरोध है कि .ext हो जाएगा आईआईएस द्वारा स्वचालित रूप से संभाला गया। वे एमवीसी 3 में गायब थे।

+0

जैसा कि नाम से पता चलता है, सभी विस्तारित यूआरएल इस से संभाले जाएंगे, जबकि सवाल विस्तार के साथ यूआरएल के अधिक प्रतीत होता है।इसके अलावा इन दो हैंडलर विशेष रूप से काम करेंगे जब आईआईएस ऐप पूल क्लासिक मोड में चल रहा है। –