2012-03-13 11 views
10

मुझे अपने आप को {stuff} पकड़ (अपवाद ई) {लॉग, अन्य सामान} कोशिश करने के साथ लिखने के तरीके मिलते हैं, इसलिए मैं यह जानने की कोशिश कर रहा था कि मदद करने के लिए एक विशेषता कैसे बनाएं मै बाहर। मैंने निम्नलिखित धागे को बड़े पैमाने पर जांच लिया है, और मुझे काम पर मेरा कार्यान्वयन नहीं मिल रहा है।सी # विशेषता के साथ घूमने के लिए विशेषता

attribute does not seem to act at all

ASP.NET MVC Controller.OnException not being called

.net Attributes that handle exceptions - usage on a property accessor

मेरे उच्च-स्तरीय web.config सेट कर दिया जाता

<customErrors mode="On" defaultRedirect="/error.html"/> 

को और मुझे नहीं-डिबग मोड में संकलन कर रहा हूँ। मेरे विशेषता के नीचे है:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] 
public class SafeWebMethodAttribute: ActionFilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     filterContext.ThrowIfNull(); 

     if (filterContext.ExceptionHandled) 
     { 
      return; 
     } 
     Log.LogException(filterContext.Exception); 
     filterContext.HttpContext.Response.StatusCode = 500; 
     filterContext.HttpContext.Response.Write(filterContext.Exception); 
     filterContext.ExceptionHandled = true; 
    } 
} 

और मैं इसे यहाँ फोन कर रहा हूँ -

public class Test : Controller 
{ 
    [SafeWebMethod] 
    public ActionResult Test() 
    { 
     throw new ArgumentException("test"); 
    } 
} 

मैं एक ब्रेकपाइंट विशेषता में मारा प्राप्त नहीं कर पा रहे हैं, या अगर मैं बदल इसे दिखाने के लिए स्थिति कोड।

मैंने कोड को [हैंडलरर] विशेषता से भी कॉपी किया है, और वहां कोई ब्रेकपॉइंट नहीं मिल सकता है, इसलिए मुझे लगता है कि यह मेरी कॉन्फ़िगरेशन में कुछ गलत है, लेकिन मैं यह नहीं समझ सकता कि क्या।

किसी भी विचार या विचारों को बहुत

उत्तर

1

सराहना की होगी कड़ी आप .net Attributes that handle exceptions - usage on a property accessor प्रदान की से जा रहे हैं क्या आप चाहते हैं संभव नहीं है (Aaronaught दूसरा कोड स्निपेट में कार्यान्वयन देखें)।

जब तक आप किसी प्रकार के पहलू ढांचे का उपयोग नहीं करते हैं, तो आपको उस कोड को लागू करना होगा जो विशेषता के प्रेसेनक के लिए जांचता है और उस पर कार्य करता है, और उस कोड को प्रत्येक catch(...) कथन में चलाएं।

विचार आपके पास बहुत अच्छा था, और मैं इसे अपने स्वयं के ढांचे में उपयोग कर सकता हूं, लेकिन बाधा अभी भी रखती है कि आपको इसे स्वयं लागू करना है।

hth

मारियो

+0

एचएम, MSDN के अनुसार, http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx, HandleError "एक विशेषता का प्रतिनिधित्व करता है जिसका उपयोग एक अपवाद को संभालने के लिए किया जाता है जिसे एक क्रिया विधि द्वारा फेंक दिया जाता है। ", और मुझे वास्तव में संपत्ति एक्सेसर्स के बारे में कुछ भी सख्त नहीं दिखाई देता था। ऐसा कहा जा रहा है, ऐसा इसलिए हो सकता है क्योंकि मेरी "विधि" एक क्रिया विधि नहीं है? – hermitt

+0

मैं एएसपी वेब प्रोग्रामिंग में नहीं हूं लेकिन मुझे लगता है कि एमवीसी नियंत्रक द्वारा बुलाए गए तरीकों के पीछे कोड को क्रिया विधि उलट देता है। मैं आगे मानता हूं कि एमवीसी नियंत्रक अपवाद को पकड़ता है और विधि के अनुसार विधि और फिर प्रक्रियाओं का मूल्यांकन करता है। यह वह पैटर्न है जिसे आप भी उपयोग कर सकते हैं - कॉलर के कैच (..) में एक फ़ंक्शन लिखता है जो गुणों की जांच करता है और तदनुसार कार्य करता है। एचटी मारियो –

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