2011-09-01 16 views
10

मैं कस्टम त्रुटि पृष्ठों का उपयोगकस्टम त्रुटि पृष्ठों के साथ MVC InvalidOperationException

<customErrors mode="On" defaultRedirect="~/Home/Error"> 
    <error statusCode="404" redirect="~/Home/PageNotFound" /> 
</customErrors> 

मैं उस पृष्ठ फेंकता है और अपवाद बनाया है और मैं सही त्रुटि पृष्ठों पर रीडायरेक्ट सेटअप।

हालांकि मैं उत्पादन वेबसर्वर पर elmah में इन त्रुटियों को देख रहा हूँ:

System.InvalidOperationException दृश्य 'त्रुटि' या अपने गुरु था नहीं मिला या दृश्य इंजन की खोज स्थानों का समर्थन। निम्नलिखित स्थानों की खोज की गई: ~/क्षेत्र/फुटबॉल/दृश्य/ड्राफ्ट/error.aspx ~/क्षेत्र/फुटबॉल/दृश्य/ड्राफ्ट/त्रुटि.स्कैक्स ~/क्षेत्र/फुटबॉल/दृश्य/साझा/त्रुटि.aspx ~/क्षेत्र/फुटबॉल/दृश्य/साझा/त्रुटि.स्कैक्स ~/दृश्य/ड्राफ्ट/error.aspx ~/दृश्य/ड्राफ्ट/त्रुटि.स्कैक्स ~/दृश्य/साझा/त्रुटि.aspx ~/दृश्य/साझा/त्रुटि। ascx ~/क्षेत्र/फुटबॉल/दृश्य/ड्राफ्ट/त्रुटि.cshtml ~/क्षेत्र/फुटबॉल/दृश्य/ड्राफ्ट/त्रुटि.vbhtml ~/क्षेत्र/फुटबॉल/दृश्य/साझा/त्रुटि.cshtml ~/क्षेत्र/फुटबॉल/दृश्य /Shared/Error.vbhtml ~/दृश्य/ड्राफ्ट/त्रुटि.cshtml ~/दृश्य/ड्राफ्ट/त्रुटि.vbhtml ~/दृश्य/साझा/त्रुटि.cshtml ~/दृश्य/साझा/त्रुटि। Vbhtml

यह कहीं और त्रुटि पृष्ठ की तलाश क्यों कर रहा है? मैंने ~/Views/Shared/Error.cshtml हटा दिया और ~/home/त्रुटि पर अपना कस्टम त्रुटि पृष्ठ जोड़ा क्योंकि मैंने अपनी कॉन्फ़िगरेशन फ़ाइल में एक नया डिफ़ॉल्ट निर्दिष्ट किया था।

कोई भी विचार?

धन्यवाद।

+0

के बाद से 'customErrors' साथ (नहीं एएसपी कुछ ASP.NET सौदों है .NET एमवीसी), यह नौकरी के लिए सबसे अच्छा उपकरण नहीं है। रिचर्ड डिंगवॉल के पास एक उत्कृष्ट पोस्ट है: http://richarddingwall.name/2008/08/17/strategies-for-resource-based-404-errors-in-aspnet-mvc/ –

उत्तर

26

डिफ़ॉल्ट रूप से MVC परियोजनाओं Global.asax.cs फ़ाइल

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

जब एक बिना क्रिया का अपवाद फेंक दिया जाता है इस फिल्टर के निष्पादित होने में HandleErrorAttribute कहते हैं। यह दृश्य को Error के रूप में सेट करता है। इसलिए एमवीसी रनटाइम उस दृश्य को प्रस्तुत करने का प्रयास करता है। लेकिन आपके मामले में, ऐसा कोई दृश्य नहीं है। तो यह फिर से एक और अपवाद फेंकता है जिसे एएसपी.NET रनटाइम द्वारा संभाला जाता है और आपके त्रुटि पृष्ठ को दिखाता है जिसे आपने Web.Config फ़ाइल में कॉन्फ़िगर किया है।

आप अपना खुद का अपवाद फ़िल्टर बना सकते हैं और इसे पंजीकृत कर सकते हैं।

+0

धन्यवाद आप सही हैं वास्तव में क्या हो रहा है। मैंने डिफ़ॉल्ट त्रुटि दृश्य को वापस रखा और अपवाद फेंक दिया, कि डिफ़ॉल्ट दृश्य नहीं ढूंढने के बारे में त्रुटि समाप्त हो गई है। हालांकि elmah अपवाद लॉग नहीं करता है। मैं डिफ़ॉल्ट दृश्य का उपयोग करने के साथ ठीक हूं, लेकिन कैसे elmah त्रुटियों को लॉग नहीं करता है? यह 404 ठीक है, लेकिन सर्वर 500 त्रुटियों को ठीक नहीं करता है। –

+2

@Aros - आपको Elmah के लिए हैंडलरर एट्रिब्यूट के एक विशेष संस्करण को लागू करने की आवश्यकता है। आप यहां एक एक्समैपल ढूंढ सकते हैं: http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx –

+0

अभी के लिए धन्यवाद मैंने उत्तर में लाइन पर टिप्पणी की है, और वेब.config से रीडायरेक्ट कस्टम त्रुटियों पर भरोसा कर रहा हूं। यदि यहां समस्याएं आती हैं तो मैं यहां जवाब का उपयोग करूंगा। http://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute/779961#779961 कोई भी जानता है कि मैं टिप्पणी क्यों नहीं करना चाहता कोड की उस पंक्ति को बाहर? –

5

मैं ग्लोबल.एक्सएक्स में HandleErrorAttribute के पंजीकरण को समाप्त कर रहा हूं और बस <customErrors> अनुभाग का उपयोग कर रहा हूं। ELMAH अब त्रुटियों को ठीक से लॉग करता है, और मैं कस्टम त्रुटि पृष्ठों को निर्दिष्ट करने में सक्षम हूं।

मैं कुछ याद आ रही है?

+0

मेरे लिए काम करने लगता है, मुझे हल्के से परेशान करता है लेकिन इसमें कुछ भी गलत नहीं दिख रहा है। – andrewb

+0

StackExchange के साथ कस्टम त्रुटियों का उपयोग करके मेरे लिए काम किया। Elmah के बजाय अपवाद। – Gareth

0

इस पोस्ट के भविष्य के पाठकों के लिए, ध्यान दें कि एल्माह अपना HandleErrorAttribute जोड़ता है, इसलिए त्रुटि.cshtml दृश्य भी अपेक्षित है। ध्यान दें कि मैंने Elmah.MVC NuGet पैकेज भी स्थापित किया है, लेकिन इसका उपयोग इसे ठीक से सेट करने के लिए किया जाता है।

हाँ, बस nuget.org पर गौर किया है कि Elmah.MVC HandleErrorAttribute जोड़ने के लिए जिम्मेदार है: में ASP.NET MVC आवेदन ELMAH कार्यक्षमता की

पीड़ारहित एकीकरण। बस अपने एएसपी के अंदर पैकेज ड्रॉप।नेट एमवीसी एप्लीकेशन और एक्सेस/एल्मा यूआरएल। यह ग्लोबल हैंडलरर फ़िल्टर, भी स्थापित करेगा जो गारंटी देता है कि सभी अनचाहे त्रुटियां लॉग हैं (भले ही customError "चालू" हो)।

1

आप यह भी सुनिश्चित है कि HandleErrorAttribute वैश्विक फिल्टर से हटाने, Remove विधि का उपयोग कर पंजीकृत नहीं है बना सकते हैं:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Remove(new HandleErrorAttribute()); 
     /* ... your other filters */ 
    } 
} 
संबंधित मुद्दे