2009-06-06 23 views
9

नहीं कहा जा रहा है मेरे पास एक बेस कंट्रोलर क्लास है जहां मैं नियंत्रक को ओवरराइड कर रहा हूं। कुछ अपर्याप्त नियंत्रकों के लिए जेनेरिक त्रुटि हैंडलिंग प्रदान करने के लिए अपरिपक्व हैंडलर विधि जो इस कक्षा से प्राप्त होगी (ये एपीआई नियंत्रक हैं जो JSON परिणाम लौटाएंगे)। जब नियंत्रक द्वारा अपवाद उठाया जाता है तो ऑनएक्सप्शन विधि कभी नहीं बुलाई जाती है। क्या कोई देखता है कि मैं क्या गलत कर रहा हूं, या क्या इस स्थिति को संभालने का एक बेहतर तरीका है?एएसपी.नेट एमवीसी नियंत्रक .ऑनएक्सप्शन को

MVC 1,0

बेस कक्षा का उपयोग करना:

public class APIController : Controller 
    { 

     protected override void OnException(ExceptionContext filterContext) 
     { 
      //This is never called 
      filterContext.Result = 
       new JsonResult(); 
      base.OnException(filterContext); 
     } 


    } 

इनहेरिट कक्षा:

public class MyController : APIController 
    { 
public AjaxResult ForcedException() 
     { 
      throw new SystemException(); 
     } 
} 
+0

"नियंत्रक द्वारा अपवाद उठाए जाने पर ऑनएक्सप्शन विधि कभी नहीं बुलाई जाती है" - क्या आपने इसे डीबगर के साथ जांच लिया? यह आपके प्रश्न से स्पष्ट नहीं है। –

+0

मैंने इसे डीबगर से और लॉग स्टेटमेंट्स का उपयोग करके और डीबगर के बाहर चलाने की कोशिश की है। उनमें से कोई भी मेरे लिए काम नहीं कर रहा है। –

उत्तर

-1

वर्ग के लिए [HandleError] विशेषता लागू करें।

10

यदि मैं आपका प्रश्न सही ढंग से समझता हूं - आपकी अपवाद को आपके ऑनएक्सप्शन में "हैंडल" के रूप में चिह्नित किया जाना चाहिए। इस प्रयास करें:

filterContext.ExceptionHandled = true; 
+0

यह मेरे लिए काम किया – benpage

+11

मैं बल्कि परेशान हूं कि यह सवाल का जवाब कैसे है ... – nashwan

+0

शून्य 1. प्रश्न का उत्तर नहीं देता है। – ken2k

2

MSDN प्रलेखन (http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onexception.aspx) कहा गया है कि OnException विधि "कहा जाता है कार्रवाई में एक बिना क्रिया का अपवाद तब होता है जब है।"

तो, ऐसा लगता है जैसे यह एक क्रिया विधि में एक अनचाहे अपवाद होता है जब यह केवल आग लग सकता है।

मैंने एक इंडेक्स एक्शन के साथ एक नया नियंत्रक बनाया। और ऑनएक्सप्शन विधि वास्तव में निष्पादित होती है। मैंने सिस्टमएक्सप्शन() और ऑनएक्सप्शन विधि को भी फेंकने की कोशिश की।

public ActionResult Index () 
    { 
     throw new NotImplementedException (); 
    } 
1

क्या आप एक इकाई परीक्षण से या एएसपी.नेट के माध्यम से नियंत्रक कार्रवाई को बुला रहे हैं? यदि आप सीधे परीक्षण में विधि को बुला रहे हैं, तो एनयूनीट के माध्यम से कहें, तो ऑनएक्सप्शन आग नहीं लगेगा: परीक्षण ढांचा अपवाद को संभालेगा और इसे एक असफल परीक्षण में बदल देगा।

1

मुझे अपने एएसपी.नेट एमवीसी 3 प्रोजेक्ट में बिल्कुल वही समस्या थी।

यह पता चला है कि यह विजुअल स्टूडियो और विकास सर्वर की एक विशेषता है। डीबग मोड में जब आपको विजुअल स्टूडियो में वापस कर दिया जाएगा और डिफ़ॉल्ट अपवाद संवाद बॉक्स दिया जाएगा।

<compilation debug="true" targetFramework="4.0"> 
इस के लिए

: ऐसा होने से रोकने के लिए

एक तरीका यह से अपने Web.config में संकलन मोड बदलने के लिए है

<compilation debug="false" targetFramework="4.0"> 

तुम भी छोड़ डिबग मोड सही पर सेट किया जा सकता है लेकिन परीक्षण करें कि आपका स्टूडियो मेनू से Start without debugging option चुनकर काम कर रहा है (Ctrl+F5 दबाकर बुलाया गया है।

0

वही नियम HandleErrorAttribute

के लिए के रूप में Controller.OnException के लिए आवेदन HandleErrorAttribute के लिए आवश्यक config यहाँ विख्यात है https://stackoverflow.com/a/528550/939634

आप mode="RemoteOnly" करने के लिए अपने web.config सेट में customError है और आप स्थानीय रूप से डीबग कर रहे हैं या आप mode="Off" है अपवादों को संभाला नहीं जाएगा और आप एक स्टैक ट्रेस के साथ एएसपी.Net पीले रंग की स्क्रीन देखेंगे।

यदि आप mode="On" सेट करते हैं या आप साइट को दूरस्थ रूप से देख रहे हैं और mode="RemoteOnly" आपकी OnException विधि ठीक से निष्पादित की जाएगी।

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