2013-05-08 7 views
8

क्या एएसपी.NET वेब एपीआई में अपवाद को चिह्नित करने के लिए कोई अपवाद चिह्नित करने के लिए कोई तरीका है?वेब एपीआई अपवाद में प्रबंधित अपवाद सेट करना FilterAttribute

मैं अपवाद फ़िल्टर के साथ विधि स्तर पर अपवाद को संभालना चाहता हूं और वैश्विक स्तर पर पंजीकृत अपवाद फ़िल्टर के प्रचार को रोकना चाहता हूं।

फ़िल्टर एक नियंत्रक कार्रवाई पर इस्तेमाल किया:

public class MethodExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is NotImplementedException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError) 
      { 
       Content = new StringContent(context.Exception.Message) 
      }; 
      // here in MVC you could set context.ExceptionHandled = true; 
     } 
    } 
} 

विश्व स्तर पर पंजीकृत फिल्टर:

public class GlobalExceptionFilterAttribute : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     if (context.Exception is SomeOtherException) 
     { 
      context.Response = new HttpResponseMessage(HttpStatusCode.SomethingElse) 
      { 
       Content = new StringContent(context.Exception.Message) 
      }; 
     } 
    } 
} 
+0

क्या आप, "अपवाद फ़िल्टर के साथ विधि स्तर पर अपवाद को संभालने" का नमूना डाल सकते हैं? – giacomelli

+0

वैश्विक फ़िल्टर प्राप्त करने के लिए पहली जगह में अपवाद को विधि में अनचाहे करना होगा - तो क्यों 'असफल कोड को' कोशिश/पकड़ 'ब्लॉक में लपेटें और उसे वहां संभाल लें? –

+0

उदाहरण जोड़े गए। – adamwtiko

उत्तर

2

अपने स्थानीय निपटने के अंत में एक HttpResponseException फेंकने की कोशिश करो। डिज़ाइन द्वारा, वे अपवाद फ़िल्टर द्वारा पकड़े नहीं जाते हैं।

throw new HttpResponseException(context.Response); 
+0

पुराना उत्तर, लेकिन मैं बस यह इंगित करना चाहता था कि यह अधिक संभालने से नहीं रोका जा सकता है। – Tipx

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