2009-02-08 18 views
10

पर कार्य नहीं कर रही है मुझे अपने नियंत्रक क्रियाओं पर [हैंडलरर] विशेषता का उपयोग करने में समस्याएं आ रही हैं - यह बिल्कुल काम नहीं कर रहा है (यानी इससे कोई फर्क नहीं पड़ता कि फ़िल्टर वहां है या नहीं - मुझे एक ही परिणाम मिलते हैं ...)। जब एक अपवाद फेंक दिया जाता है, तो मुझे अपने कस्टम व्यू के बजाय '/' एप्लिकेशन त्रुटि पृष्ठ में मानक लाल-टन सर्वर त्रुटि मिलती है।विशेषता

मुझे एसओ पर इस विषय पर कुछ अन्य धागे मिल गए हैं, और ज्यादातर मामलों में ऐसा लगता है कि web.config में कस्टम इरर्स विकल्प को चालू करने से समस्या हल हो गई है। यह मेरे लिए नहीं है, इसलिए मुझे एक अलग समाधान खोजने की जरूरत है।

मेरे नियंत्रक कार्रवाई:

[HandleError] 
public ActionResult Index() 
{ 
    throw new Exception("oops..."); 
    return View(); 
} 

मेरी web.config फ़ाइल में

<customErrors mode="On"></customErrors> 

मुझे यकीन है कि Error.aspx फ़ाइल भी साझा निर्देशिका में है बना दिया है। मैं क्या खो रहा हूँ?

मैं एएसपी.नेट एमवीसी आरसी ताज़ा कर रहा हूं।

उत्तर

11

दो उपयोगी बातें:

डिफ़ॉल्ट रूप से, HandleError जब विकास सर्वर के अंतर्गत चल रही कुछ नहीं करता है।

public virtual void OnException(ExceptionContext filterContext) { 
    if (filterContext == null) { 
     throw new ArgumentNullException("filterContext"); 
    } 

    // If custom errors are disabled, we need to let the normal ASP.NET 
    // exception handler execute so that the user can see useful 
    // debugging information. 
    if (filterContext.ExceptionHandled 
     || ! filterContext.HttpContext.IsCustomErrorEnabled) { 
     return; 
    } 

ध्यान दें कि इस मामले ठीक है क्या customError नियंत्रित करने के लिए माना जाता है: इरादा डेवलपर्स और अधिक उपयोगी जानकारी को दिखाने के लिए है। की स्थापना customError="On" इस व्यवहार को बदलने नहीं होता है:

  1. अपने वाक्य रचना की जाँच करें।
  2. सुनिश्चित करें कि आप प्रोजेक्ट रूट में Web.config संपादित कर रहे हैं, न कि दृश्यों में से एक।
  3. सुनिश्चित करें कि कोई कोड HttpContext.IsCustomErrorEnabled सेट करता है।
  4. सब और विफल रहता है,, में Web.config

दूसरा डिबग बंद करने की कोशिश कोई त्रुटि जो HandleError संभाल कभी नहीं होगा, विशेष रूप से ASP.NET संकलन त्रुटियों के कुछ प्रकार के। आप यह नहीं कहते कि आप किस त्रुटि का सामना कर रहे हैं।

+0

आपके उत्तर के लिए धन्यवाद! आपकी पहली टिप्पणी वास्तव में बताती है कि मुझे कोई प्रभाव क्यों नहीं दिख रहा है ... क्या कोई तरीका है कि मैं सर्वर पर अपलोड करने से पहले स्थानीय रूप से त्रुटि को संभालने का परीक्षण कर सकता हूं? कैसे? मेरा प्रोजेक्ट संकलित करता है, लेकिन मैं जानबूझ कर त्रुटि प्रबंधन को परीक्षण करने के लिए रनटाइम अपवाद फेंक रहा हूं। –

+0

अद्यतन उत्तर देखें। –

+0

हाय फिर से। मैंने अब कस्टम एड्रेस = "ऑन" को डिफ़ॉल्ट रीडायरेक्ट के साथ और बिना, कस्टमइरर्स = "ऑफ", नोड को पूरी तरह से हटाकर, और डीबग = "झूठी" सेटिंग की कोशिश की है - और केवल अंतर यह है कि लाल-टोन त्रुटि पर जानकारी क्या दिखाई देती है पृष्ठ ... क्या यह डिबगिंग या कैसिनी का उपयोग कर रहा है जो समस्या का कारण बनता है? –

3

आपको यह निर्दिष्ट करने की आवश्यकता है कि कौन सा पृष्ठ रीडायरेक्ट करना है।

<customErrors mode="On" defaultRedirect="Error.aspx" /> 

संपादित करें: क्षमा करें/साझा/भाग वहाँ शर्त नहीं होनी चाहिए, लेकिन आप Error.aspx साथ करने के लिए उपयोगकर्ता भेजने के लिए MVC जो पेज बताने के लिए की जरूरत है। फिर डिफ़ॉल्ट मार्ग साझा में त्रुटि.aspx नामक किसी चीज़ की तलाश करता है।

बहुत देर हो चुकी थी! :) मुझे लगता है कि किसी ने मुझे जवाब के लिए एक ऋण दिया है! :) कम से कम यह दोस्त यहाँ काम करता है!

+0

मैं माफी चाहता हूँ, लेकिन यह भी या तो Error.aspx साथ काम नहीं करता ... –

+0

, यह इस लेख http://weblogs.asp.net/ के अनुसार आवश्यक नहीं होना चाहिए स्कॉटू/संग्रह/2008/07/14/एएसपी-नेट-एमवीसी-पूर्वावलोकन -4-रिलीज-पार्ट-1.aspx (जो सबसे हालिया है जिसे मैं ढूंढने में सक्षम हूं, हालांकि यह केवल पीवी 4 पर है ...) –

+0

मैंने उस लेख को पढ़ा लेकिन मेरे लिए त्रुटि तब तक संभाली नहीं जाती जब तक कि मैं कहूं कि कहां रीडायरेक्ट करना है। – mhenrixon

3

मुझे एक ही समस्या मिली और अंत में इसे समझने में मुझे दो पूर्ण दिन लगे। यह पता चला कि मुझे साइट में एक त्रुटि मिली है। मस्टर पेज, और Error.aspx ने अन्य सभी पृष्ठों के समान मास्टर पेज का उपयोग किया। स्पष्ट रूप से Error.aspx ऐसी स्थिति से निपट नहीं सका।

मेरा समाधान एक विशिष्ट त्रुटि.मास्टर पेज बनाना है जो हल्के वजन वाले है और इसमें कोई मॉडल डेटा शामिल नहीं है। Additionaly मैंने एक स्थिर त्रुटि बनाई।त्रुटि .aspx से कोई त्रुटि उत्पन्न होने पर htm। Web.config सेटिंग निम्नानुसार है:

<customErrors mode="On"> 
    <error statusCode="500" redirect="Error.htm" /> 
</customErrors> 

आशा है कि इससे मदद मिलती है।

+0

मेरा Error.aspx पृष्ठ भी अपना अपवाद फेंक रहा था। डीबग करने के लिए यह दर्द है! –

+0

त्रुटि.htm 500 के बजाय 200 के HTTP प्रतिक्रिया स्थिति कोड को वापस करने के लिए प्रतीत होता है! –

0

के लिए इस समस्या हो सकती है एक और कारण,

खाका MVC आवेदन में, Error.aspx (वी.एस. द्वारा उत्पन्न) (VS2008/VS2008 एक्सप्रेस द्वारा उत्पन्न) मास्टर पृष्ठ का उपयोग करता है।

यदि मास्टर पेज किसी भी व्यूडेटा तक पहुंचता है तो यह शून्य संदर्भ अपवाद फेंक देगा, तो error.aspx नहीं दिखाया जाएगा।

अपने Error.aspx के रूप में इस सरल कोड का प्रयोग करें, यह समस्या का समाधान होगा, (customErrors के साथ = पर)

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %> 
<%= Model.Exception.Message %> 
0

दिखाए जाने के लिए 404 समस्या है जब Error.aspx चाहिए था चारों ओर पाने के लिए , मुझे httpHandler अनुभाग से Error.aspx को बाहर करना पड़ा जो किसी भी दृश्य को सीधे एक्सेस करने से रोकता था (एमवीसी 2 ढांचे के आसपास)। मैंने Error.aspx को 'त्रुटि' सबफ़ोल्डर में डालकर और इस सबफ़ोल्डर में <remove path="*" verb="*" /> httpHandlers अनुभाग में एक वेब.कॉन्फिग डालकर ऐसा किया। इस समस्या से मेरे संस्करण (और इसके समाधान) MVC 2. के लिए विशिष्ट हो सकता है

defaultRedirect संदर्भ अद्यतन करने के लिए, जब आप Error.aspx :) के लिए कदम याद रखें

0

मैं उपरोक्त सुझावों की कोशिश की लेकिन कुछ भी नहीं है मेरे लिए काम किया । इस त्रुटि को मेरे त्रुटि नियंत्रक के भीतर मेरे कार्यों से इस लाइन को हटा रहा था।

Response.StatusCode = (int)HttpStatusCode.NotFound; 

मैं अपने बालों को खींच रहा था क्योंकि आईआईएस त्रुटि संदेशों ने मेरी त्रुटि प्रबंधन को रोक दिया था। और यह आदर्श नहीं है क्योंकि मैं अपनी प्रतिक्रिया में उस स्थिति कोड को प्रदान करना चाहता हूं, मैंने पाया कि इसे हटाने से आईआईएस 7+ को मेरी त्रुटि प्रबंधन से हस्तक्षेप करने से रोका गया।

DaTribe

+0

यदि आप इसका उपयोग करना चाहते हैं, और आप कर सकते हैं, तो आपको पहले 'Response.TrySkipIisCustomErrors = true' सेट करना होगा। – ehdv

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