2013-03-13 9 views
19

लौटाता है मेरे पास एक प्रोजेक्ट है जो दृश्य स्टूडियो के भीतर से इसे चलाने पर बंडल के साथ काम करता है। हालांकि, तैनाती करने के बाद, बंडलिंग हैंडलर कभी भी रास्ता नहीं लेता है। यह इसके बजाय स्थैतिक फ़ाइल हैंडलर पर जा रहा है, जो 404 प्रतिक्रिया देता है।एमवीसी 4 बंडल 404

कोई भी विचार? मैं आईआईएस के तहत वेबसाइट के बिन में अनुकूलन असेंबली देखता हूं।

यह 4.0 ऐप पूल और एकीकृत मोड का उपयोग कर रहा है।

मुझे आश्चर्य है कि किसी के पास कोई विचार या सुझाव हैं?

धन्यवाद

----- अद्यतन प्रश्नों पर आधारित -----

VS2012

targetFramework = "4.5"

मैं भी करने के लिए दृश्य में कुछ कोड जोड़ा दिखाने के जो मॉड्यूल लोड किया गया और मैं वहाँ सूचीबद्ध बंडल मॉड्यूल देख सकते हैं।

इंटरनेट एप्लिकेशन MVC4 प्रोजेक्ट टेम्पलेट का उपयोग करते समय बंडल कॉन्फ़िग डिफ़ॉल्ट प्रदान किया गया है।

साइट रूट में तैनात की जा रही है। यह अजीब बात है जब मैं EnableOptimizations = true सेट करता हूं (दृश्य स्टूडियो F5 के माध्यम से डीबग मोड में चलने के कारण), यह सही काम करता है! मैं सामग्री/सीएसएस पर नेविगेट कर सकता हूं और यह संयुक्त सीएसएस को थूकता है।

मैं इसे तैनात करता हूं और बाकी सब कुछ काम करता है, लेकिन बंडलिंग!

+1

हो सकता है बंडल फ़ाइलों के लिए अपना रास्ता एक ही है कि होना चाहिए की तुलना में अलग है ... –

+0

4.0 या 4.5 करने के लिए सेट क्रम है? Web.config जांचें। आप वीएस2012 या 2010 का उपयोग कर रहे हैं? – ApolloSoftware

+0

मुझे नहीं लगता कि मैं अपने आईआईएस फ़ोल्डर में प्रकाशित करने पर पथ गलत कैसे हो सकता है और बाकी सब कुछ ठीक (दृश्य, लेआउट, छवियां) लोड करता है। यदि मैं मैन्युअल रूप से css फ़ाइल /content/site.css को लोड करता हूं तो यह लोड करता है। लेकिन जब मैं bundlemodule हिट/सामग्री/सीएसएस हिट करता हूं तो कॉल को अवरुद्ध नहीं करता है और बंडल सीएसएस सामग्री लोड करता है! – Mike

उत्तर

23

मैंने अभी इस समस्या को हिट किया है (और हल किया है)।

सुनिश्चित करें कि आपके बंडल के वर्चुअल पथ एक मौजूदा निर्देशिका या वास्तविक फ़ाइल नाम के लिए भ्रमित नहीं होना कर सकते हैं। मेरे मामले में, मैं इसे के रूप में कोडित था:

bundles.Add(new ScriptBundle("~/bundles/main.js").Include(... 

लेकिन जब मैंने उसे

bundles.Add(new ScriptBundle("~/bundles/main").Include(... 

करने के लिए बदल यह सब काम करना शुरू किया।

+0

मैं ** अन्य समाधान के लिए फ़ॉन्ट भयानक फ़ॉन्ट, उपयोग करने के लिए ** इन कड़ियों जो 'StyleBundle' के साथ सौदों की कोशिश में एक ही मुद्दा था ** virtualpath **: [लिंक 1] (http://www.mvccentral.net/story/विवरण/लेख/kahanu/stylebundle-403-त्रुटि हल), [लिंक 2] (http://forums.asp.net/t/1774324.aspx?MVC4+css+bundling+and+image+references), [लिंक 3] (http://ericpanorel.net/2013/10/25/font-awesome-4-0-mvc-bundling-and-minification/), [लिंक 4] (http://jameschambers.com/ 2014/08/add-some-font-awesome-to-mvc-and-bootstrap /), उम्मीद है कि यह किसी की सहायता करेगा। – stom

12

11/17/2013 पर अपडेट किया गया उत्तर यह तथ्य इस तथ्य के कारण होता है कि डिफ़ॉल्ट एमवीसी रूटिंग केवल * के बजाय * संभालती है। * अर्थात IIS या आईआईएस एक्सप्रेस के ApplicationHost.config निम्नलिखित है:

  <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> 

तो यह वैकल्पिक हल के लिए, हम निम्नलिखित web.config को जोड़ सकते हैं:

 <system.webServer> 
     <handlers>  
      <add name="UrlRoutingHandler" 
       type="System.Web.Routing.UrlRoutingHandler, 
        System.Web, Version=4.0.0.0, 
        Culture=neutral, 
        PublicKeyToken=b03f5f7f11d50a3a" 
       path="/bundles/*" 
       verb="GET"/>  
     </handlers> 
     </system.webServer> 

अधिक जानकारी के लिए आप कर सकते हैं निम्नलिखित संदर्भ: http://weblogs.asp.net/owscott/archive/2013/01/16/handing-mvc-paths-with-dots-in-the-path.aspx ASP.NET MVC Url Route supporting (dot)

पुरानी गलत जवाब: असल में, डॉट आम तौर पर आभासी पथ में अनुमति नहीं है जब IIS यूआरएल को पार्स। यह a Link उल्लेख निम्नलिखित URLScan AllowDotInPath पैरामीटर: डिफ़ॉल्ट रूप से, इस विकल्प को 0 पर सेट किया जाता है तो इस विकल्प को 0 पर सेट है, URLScan किसी भी अनुरोध है कि एकाधिक अवधि शामिल है को खारिज कर दिया (।)।यह पथ जानकारी या URL के क्वेरी स्ट्रिंग भाग में एक सुरक्षित फ़ाइल नाम एक्सटेंशन डालकर खतरनाक फ़ाइल नाम एक्सटेंशन के अनुरोधों को छिपाने के प्रयासों को रोकता है। उदाहरण के लिए, यदि यह विकल्प 1 पर सेट किया गया है, तो URLScan http: // servername/BadFile.exe/SafeFile.htm के लिए अनुरोध की अनुमति दे सकता है क्योंकि यह इसे HTML पृष्ठ के अनुरोध के रूप में व्याख्या करता है, जब यह वास्तव में एक अनुरोध है निष्पादन योग्य (.exe) फ़ाइल PATH_INFO क्षेत्र में एक HTML पृष्ठ के नाम के साथ। जब यह विकल्प 0 पर सेट होता है, तो URLScan उन निर्देशिकाओं के अनुरोधों को भी अस्वीकार कर सकता है जिनमें अवधि होती है।

+1

प्रलेखन का कहना है कि यह ** एकाधिक ** अवधि वाले अनुरोध को अस्वीकार कर देगा; जो अनुमान लगाता है कि एक ही अवधि ठीक होनी चाहिए। – gerrod

+1

@gerrod, अंतिम वाक्य इंगित करता है: जब यह विकल्प 0 पर सेट होता है, तो URLScan भी उन निर्देशिकाओं के अनुरोधों को अस्वीकार कर सकता है जिनमें अवधि होती है। बंडलिंग कार्य के साथ, यह जेनरेट किए गए यूआरएल में कुछ जेनरेटेड हैशिंग प्रत्यय जोड़ देगा। तो यह दिखाई देगा वर्चुअल निर्देशिका में एक बिंदु है। इस प्रकार यह काम नहीं करेगा। – xinqiu

+0

उहम, नहीं, यह अभी भी सही नहीं है। हैश को एक क्वेरी स्ट्रिंग पैरामीटर के रूप में जोड़ा जाता है, उदा। 'बंडलों/main.js? V = {} हैश'। मैंने सचमुच बस कोशिश की है, और आप ** सही ** हैं कि पथ में एक से अधिक अवधि होने से URLS अनुरोध को अस्वीकार कर देगा; लेकिन एक अवधि होने के ठीक है। – gerrod

3

यहां तक ​​कि मैं एक ही त्रुटि मिली। <modules runAllManagedModulesForAllRequests="true" /><system.webServer> के तहत web.config फ़ाइल में समस्या हल हो गई।

0

मैं भी नमूना MVC आवेदन के साथ एक ही समस्या थी। मैंने डिफ़ॉल्ट टेम्पलेट को सीएसएस नाम के साथ स्टाइल शीट को बंडल किया जो मुझे लगता है कि आईआईएस पसंद नहीं करता जिसके परिणामस्वरूप 404 त्रुटि होती है।

APPCSS लिए सीएसएस से बंडल नाम बदलने से मेरे लिए इस मुद्दे को हल करेंगे।

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