2010-01-15 21 views
12

में हिट नहीं किया जा रहा है मेरे पास एक कस्टम अपवाद फ़िल्टर है जिसका उपयोग मैंने एक कस्टम अपवाद को पकड़ने के लिए किया है, लेकिन किसी कारण से जब मैं अपना अपवाद फेंकता हूं, तो यह कभी फ़िल्टर नहीं हो रहा है । इसके बजाय मुझे बस एक त्रुटि मिली है कि मेरा अपवाद उपयोगकर्ता कोड द्वारा प्रबंधित नहीं किया गया था। क्या कोई इस बारे में कुछ सलाह/सहायता प्रदान कर सकता है कि मुझे यह कैसे स्थापित करना चाहिए? प्रासंगिक कोड के नीचे है:कस्टम अपवाद फ़िल्टर एएसपीएनटी एमवीसी

// controller  
[CustomExceptionFilter] 
    public class SomeController : Controller 
    {  
     public SomeController() 
     { 

     } 
     public ActionResult Index() 
     { 
      SomeClass.SomeStaticMethod(); 
      return View(); 
     } 
    } 

customexception विशेषता

// some class (where exception is being thrown) 
public class SomeClass 
{ 
    public static void SomeStaticMethod() 
    { 
     throw new MyCustomException("Test"); 
    } 
} 

वर्ग (अपने परीक्षण के लिए) है कि साथ नियंत्रक कि अपवाद फेंकता है (मैं भी यह सीधे फेंक नियंत्रक पर की कोशिश की है कि)।

// Custom exception filter (want this to catch all unhandled exceptions) 
public class CustomExceptionFilter : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.Exception.GetType() == typeof(MyCustomException)) 
     { 
      // do stuff 
     } 
    } 
} 

यह कस्टम अपवाद फ़िल्टर है ... कोड निष्पादित होने पर यह कभी नहीं पहुंचा जा रहा है और अपवाद फेंक दिया गया है। इसके बजाय मुझे ऊपर वर्णित त्रुटि मिलती है। मैंने जो कुछ भी पढ़ा है, यह इंगित करता है कि यह सेट अप करने का यह सही तरीका है, लेकिन जब मैं अपने कस्टम फ़िल्टर में ब्रेकपॉइंट डालता हूं, तो इसे कभी भी हिट नहीं किया जाता है ....

मुझे यहां क्या याद आ रही है?

TIA

उत्तर

7

बार जब आप अपने त्रुटि संभाला है, आप फ़िल्टर संदर्भ जाने के लिए पता है कि यह संभाला कर दिया गया है की जरूरत है। इस तरह:

filterContext.ExceptionHandled = true; 

यह आपके '// डू स्टफ' अनुभाग में होना चाहिए।

मैंने आपका कोड कॉपी किया है, और फ़िल्टर को ठीक कहा जा रहा है। मैंने जो एकमात्र अंतर बनाया था, मैंने अपवाद कोड जोड़ा और उस रेखा पर अपना ब्रेकपॉइंट जोड़ दिया।

+0

उम्मीद है कि आप अभी भी इसका पालन कर रहे हैं भले ही यह 4 दिन पुराना हो। मैं बस इस पर वापस आ गया और मेरे ब्लॉक के अंदर कोड की अपनी लाइन जोड़ दी .... यह कभी नहीं पहुंचा जा रहा है क्योंकि मेरी ऑनएक्सप्शन विधि कभी नहीं बुलाई जा रही है। क्या वहां कोई झंडा है जिसे मुझे सेट करने की आवश्यकता है (शायद web.config में) या इस फ़िल्टर में अपवादों को संभालने के लिए एप्लिकेशन को बताने के लिए कुछ? मुझे अभी भी "नया MyCustomException (" टेस्ट ") फेंकने पर त्रुटि मिल रही है;" रेखा इंगित करती है कि उपयोगकर्ता कोड द्वारा अपवाद को अनचाहे किया गया था। – Kyle

+1

मुझे किसी भी झंडे को सेट करने की आवश्यकता नहीं थी, या web.config पर कुछ भी जोड़ने की आवश्यकता नहीं थी। यह अभी काम करता है। जब मैं डीबग मोड में जाता हूं: पहला अपवाद फेंक दिया जाता है और यह वहां टूट जाता है। फिर मैं play दबाता हूं और यह ऑनएक्सप्शन में मेरे ब्रेकपॉइंट पर जाता है। क्या आपने डीबग मोड में कदम उठाने का प्रयास किया है? –

+0

मुझे लगता है कि सबकुछ एक ही नेमस्पेस में है और आपके पास केवल एक कस्टम अपवाद Filter और CustomException है। –

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