2017-05-22 53 views
7

मैं निम्नलिखित जैसे एक कस्टम अपवाद FilterAttribute है:एक एमवीसी अपवाद फ़िल्टर को एप्लिकेशन-स्तरीय त्रुटि हैंडलर बनाम कब निष्पादित किया जाएगा?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] 
public sealed class ExceptionLoggingFilterAttribute : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException(nameof(filterContext)); 
     } 

     if (filterContext.ExceptionHandled) 
     { 
      return; 
     } 

     // some exception logging code (not shown) 

     filterContext.ExceptionHandled = true; 
} 

मैं यह मेरा FilterConfig.cs

public static class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters?.Add(new ExceptionLoggingFilterAttribute()); 
    } 
} 

में विश्व स्तर पर पंजीकृत किया है मैं भी एक Application_Error विधि मेरी Global.asax में घोषित किया है। सीएस

protected void Application_Error(object sender, EventArgs e) 
    { 
     var exception = Server.GetLastError(); 

     // some exception logging code (not shown) 
    } 
  1. जब अपवाद फ़िल्टर कोड मारा जाएगा और जब Wil यह एप्लिकेशन_इरर विधि में सीधे वैश्विक त्रुटि हैंडलर पर जाता है? (मैं अपवाद हंडल अवधारणा को समझता हूं और महसूस करता हूं कि मेरे फ़िल्टर में इसे संभालने के रूप में चिह्नित करने के बाद, यह वैश्विक त्रुटि हैंडलर तक नहीं पहुंच जाएगा)।

एक अपवाद जो मैंने सोचा था कि फ़िल्टर को हिट करेगा - 404 के लिए एक एचटीपीएक्सप्शन, फ़िल्टर को हिट नहीं करता है लेकिन एप्लिकेशन त्रुटि हैंडलर में पकड़ा जाता है।

  1. मैंने कुछ कोड नमूने देखे हैं जहां लोग global.asax.cs में सर्वर को करने के लिए HttpContext.Current का उपयोग करते हैं। एक विशिष्ट त्रुटि दृश्य के लिए ट्रांसफर Request। क्या यह सबसे अच्छा अभ्यास है? क्या web.config के system.web अनुभाग में CustomErrors अनुभाग का उपयोग करना बेहतर होगा?

उत्तर

0

एक अपवाद फ़िल्टर केवल एएसपी.नेट एमवीसी पाइपलाइन के निष्पादन के दौरान होने वाली त्रुटियों के लिए मारा जाएगा, उदाहरण के लिए एक्शन विधि के निष्पादन के दौरान:

अपवाद फ़िल्टर। ये IExceptionFilter को कार्यान्वित करते हैं और निष्पादित करते हैं तो एएसपी.नेट एमवीसी पाइपलाइन के निष्पादन के दौरान एक अनचाहे अपवाद फेंक दिया जाता है। अपवाद फ़िल्टर का उपयोग जैसे लॉगिंग या त्रुटि पृष्ठ को प्रदर्शित करने के लिए किया जा सकता है। हैंडलरर एट्रिब्यूट क्लास एक अपवाद फ़िल्टर का एक उदाहरण है।

(से: https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx)

एक 404 त्रुटि के मामले में, एक कार्य विधि, निर्धारित नहीं किया जा सकता है, ताकि त्रुटि फिल्टर में नहीं संभाला है।

अन्य सभी त्रुटियों को Application_Error विधि में संभाला जाएगा। http://benfoster.io/blog/aspnet-mvc-custom-error-pages

:

अपने प्रश्न के दूसरे भाग के रूप में, मैं निम्न ब्लॉग पोस्ट है कि कैसे एक विश्वसनीय तरीके से कस्टम एरर पृष्ठ स्थापित करने के लिए पर एक अच्छा सिंहावलोकन शामिल की सलाह देते हैं

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