2009-04-10 5 views
5

मैं ऐसी क्रियाएं हैं जो इस तरह दिखता है द्वारा फेंका अपवाद लॉग इन करने के एक फिल्टर का उपयोग कर रहा:एएसपी.नेट एमवीसी - जेएसओएन एक्शन में अपवाद कैसे संभालें (जेएसओएन त्रुटि जानकारी लौटाएं), लेकिन फिल्टर के लिए अपवाद भी प्रकाशित करें?

public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if (filterContext.Exception != null) 
     { 
      //logger.Error(xxx); 
     } 
     base.OnActionExecuted(filterContext); 
    } 

अब मैं अपवाद जानकारी के साथ JSON परिणाम वापस जाने के लिए अपने सभी JSON क्रियाओं को संचालित करना चाहते हैं। यह अजाक्स को यह निर्धारित करने की अनुमति देता है कि त्रुटि पृष्ठ स्रोत प्राप्त करने के बजाय सर्वर पर कोई त्रुटि हुई है, जो अजाक्स के लिए बेकार है। मैं अपने AppControllerBase में JSON कार्यों के लिए इस पद्धति को क्रियान्वित किया है:

public ActionResult JsonExceptionHandler(Func<object> action) 
    { 
     try 
     { 
      var res = action(); 
      return res == null ? JsonSuccess() : JsonSuccess(res); 
     } 
     catch(Exception exc) 
     { 
      return JsonFailure(new {errorMessage = exc.Message}); 
     } 
    } 

यह अच्छा काम करता है, लेकिन स्पष्ट रूप से पकड़() बयान, अपवाद हैंडलिंग से सभी फिल्टर से बचाता है कोई अपवाद नहीं वास्तव में फेंक दिया है, क्योंकि वहाँ। फिल्टर (filterContext.Exception) के लिए अपवाद छोड़ने का कोई तरीका है?

उत्तर

-1

समाधान:

कार्रवाई

public ActionResult JsonExceptionHandler(Func<object> action) 
    { 
      try 
      { 
        var res = action(); 
        return res == null ? JsonSuccess() : JsonSuccess(res); 
      } 
      catch(Exception exc) 
      { 
        controller.ControllerContext.HttpContext.AddError(exc); 
        return JsonFailure(new {errorMessage = exc.Message}); 
      } 
    } 

फिल्टर

public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
      var exception = filterContext.Exception ?? filterContext.HttpContext.Error; 
      if (exception != null) 
      { 
       //logger.Error(xxx); 
      } 

      if (filterContext.Result != null && 
       filterContext.HttpContext.Error != null) 
      { 
       filterContext.HttpContext.ClearError(); 
      } 

      base.OnActionExecuted(filterContext); 
    } 
+6

कृपया प्रकाशित अपने JsonFailure && JsonSuccess – ari

1

आप RequestContext में अपवाद संग्रहीत कर सकते हैं और इसे अपने फ़िल्टर में अवरुद्ध कर सकते हैं।

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