2013-02-14 88 views
23

मुझे लगता है कि एक स्थिति में हम ActionFilterAttribute वर्ग से इस तरह इनहेरिट OnActionExecuting या OnActionExecuted तरीकों ओवरराइड कर सकते हैं:FilterAttribute, IActionFilter लागू करने और asp.net MVC के 3 में ActionFilterAttribute से इनहेरिट के बीच क्या अंतर है?

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { // bla bla } 
} 

और दूसरी स्थिति में हम भी IActionFilter लागू कर सकते हैं और FilterAttribute इस तरह:

public class MySecondFilterAttribute : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuted(ActionExecutingContext filterContext) {} 
} 

तो, क्या इन दो दृष्टिकोणों के बीच कोई अंतर है, शायद कोई विशेष परिस्थिति जहां दूसरे में से एक का उपयोग करना बेहतर होगा ??

अग्रिम धन्यवाद।

उत्तर

16

मूल रूप से FilterAttribute MVC गुण का सबसे कम स्तर व्यवहार प्रदान करता है और IMvcFilter कि आदेश और AllowMultiple गुण प्रदान करता है लागू करता है।

एक्शनफिल्टरएट्रिब्यूट IActionFilter, IResultFilter के कार्यान्वयन और फ़िल्टर एट्रिब्यूट से प्राप्त होने के बाद से क्रियाओं और परिणामों को फ़िल्टर करने का आधार है।

आपका MySecondFilterAttribute कार्यान्वयन आईरसल्टफिल्टर क्षमताओं के बिना ActionFilterAttribute की ओर जाता है (OnResultExecuting और OnResultExecuted)।