2015-01-28 11 views
9

पर लागू होने से रोकें। मैं Alex Beletsky's elmah-mvc NuGet पैकेज का उपयोग कर अपने एमवीसी अनुप्रयोग पर अपवाद लॉगिंग के लिए एल्मा का उपयोग कर रहा हूं।एएसपी.NET एमवीसी ग्लोबल फ़िल्टर को एल्मा एक्शन

एप्लिकेशन कुछ वैश्विक फ़िल्टर पंजीकृत करता है, जिसे प्रत्येक क्रिया पर लागू किया जाता है।

क्या Elmah.Mvc.ElmahController त्रुटि लॉग पेज (foo.com/elmah) पर कॉल करते समय उन फ़िल्टरों को लागू करने से रोकने का कोई तरीका है?

नीचे की तरह एक परीक्षण, निश्चित रूप से काम करता है, लेकिन मैं एक और अधिक सुरुचिपूर्ण तरीका ढूंढ रहा हूं जिसमें फ़िल्टर को संशोधित करने में शामिल नहीं होगा (न ही एल्मा/एल्मा एमवीसी से स्रोत कोड)। क्या यह भी संभव है?

public class FooAttribute : FilterAttribute, IActionFilter 
{ 
    // ... 

    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.Controller is ElmahController) 
     { 
      return; 
     } 

     // do stuff 
    } 
} 
  • मुझे लगता है कि जिम्मेदार बताते हैं can't be added or removed at runtime पता है।

  • मैं एक नया जहाँ मैं एक अपवर्जन फ़िल्टर जोड़ सकते में ElmahController लपेटकर के बारे में सोचा है, लेकिन मुझे यकीन है कि कैसे (यदि संभव हो) web.config बदलने के लिए इस आवरण को संदर्भित करने के मूल नियंत्रक के बजाय नहीं हूँ। कॉल करने के बजाय

    public class MyFilterProvider : IFilterProvider 
    { 
        public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) 
        { 
         if (controllerContext.Controller is ElmahController) 
         { 
          return Enumerable.Empty<Filter>(); 
         } 
    
         return ... the collection of your global filters 
        } 
    } 
    

    और अपने Application_Start में:

+0

इसे जांचें - http: // s tackoverflow.com/questions/9953760/how-to-disable-a-global-filter-in-asp-net-mvc-selectively – malkam

+0

@malkam मुझे यह पता है। समस्या यह है कि इसमें एक विशेषता के साथ कार्रवाई को सजाने में शामिल है, यानी स्पष्ट कारणों से, एल्मा स्रोत कोड को संशोधित करना, जिसे मैं नहीं करना चाहता हूं। –

+0

यह समाधान मेरे लिए इतना भयानक प्रतीत नहीं होता है। मैं शायद इसे सकारात्मक में करूँगा हालांकि: 'अगर (नियंत्रक ElmahController है) {// कोई विशेष कार्रवाई के साथ वापसी – DLeh

उत्तर

6

आप एक कस्टम IFilterProvider के माध्यम से अपने वैश्विक फिल्टर रजिस्टर सकता

FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

आप कहेंगे:

FilterProviders.Providers.Add(new MyFilterProvider()); 
+0

यही विचार है। मुझे वैश्विक फ़िल्टर से आंतरिक Elmah.Mvc.HandleErrorAttribute प्राप्त करना होगा (यह स्वचालित रूप से ऐप शुरू होने के दौरान पंजीकृत हो जाता है http://beletsky.net/2012/06/elmahmvc-v200-release-candidate.html), लेकिन मैं अनुमान लगाओ यह वह समाधान है जिसे मैं ढूंढ रहा हूं। धन्यवाद! –

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