ध्यान दें कि यह उत्तर MVC 5 / Web API 2 पर सही है
संक्षिप्त उत्तर: एमवीसी और वेब एपीआई फिल्टर संगत नहीं हैं, और यदि आप उन्हें विश्व स्तर पर पंजीकृत करना चाहते हैं, तो आपको प्रत्येक के लिए उपयुक्त कॉन्फ़िगरेशन कक्षाओं का उपयोग करना चाहिए।
लंबे उत्तर: ASP.NET MVC और वेब एपीआई जानबूझकर समान तरीके से काम करने के लिए डिज़ाइन किए गए हैं, लेकिन वे वास्तव में अलग-अलग जीव हैं।
वेब API System.Web.Httpनाम स्थान के नीचे रहता है , जबकि MVC System.Web.Mvcनाम स्थान के नीचे रहता है । दोनों खुशी-खुशी साथ-साथ रहेंगे, लेकिन एक में दूसरा नहीं है और प्रोग्रामिंग मॉडल में समानता के बावजूद, अंतर्निहित कार्यान्वयन अलग हैं। जिस तरह MVC कंट्रोलर और वेब API कंट्रोलर अलग-अलग बेस कंट्रोलर क्लासेस (MVC's को बस नाम दिया जाता है Controllerऔर वेब एपीआई का नाम दिया गया है ApiController) के आधार पर MVC फिल्टर और वेब एपीआई फिल्टर अलग-अलग FilterAttributeवर्गों से विरासत में मिलते हैं (दोनों इस मामले में एक ही नाम साझा करते हैं, लेकिन अलग-अलग हैं उनके संबंधित नामस्थानों में)।
यदि आप WebActivator के साथ किसी प्रोजेक्ट टेम्प्लेट का उपयोग कर रहे हैं, तो वेब API वैश्विक फ़िल्टर HttpConfigurationआपके लिए उपलब्ध Registerविधि WebApiConfig.cs में मौजूद ऑब्जेक्ट के माध्यम से पंजीकृत हैं।
public static void Register(HttpConfiguration config)
{
//stuff before
config.Filters.Add(new MyWebApiFilter());
//stuff after
}
या अन्यथा global.asax.cs में:
GlobalConfiguration.Configuration.Filters.Add(new MyWebApiFilter());
Mvc वैश्विक फ़िल्टर किसी GlobalFilterCollectionऑब्जेक्ट के माध्यम से पंजीकृत होते हैं , जो RegisterGlobalFiltersकि WebActivator का उपयोग करने वाली परियोजनाओं के लिए FilterConfig.cs की विधि के माध्यम से आपके लिए उपलब्ध है :
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//stuff before
filters.Add(new MyMvcFilter());
//stuff after
}
}
या GlobalFilters.FiltersWebActivator के बिना संग्रह के माध्यम से global.asax.cs फ़ाइल में :
GlobalFilters.Filters.Add(new MyMvcFilter());
यह ध्यान देने योग्य है कि दोनों मामलों में आपको उपयुक्त FilterAttributeप्रकार से विरासत में प्राप्त करने की आवश्यकता नहीं है । वेब एपीआई फिल्टर को केवल System.Web.Http.IFilter इंटरफ़ेस को लागू करने की आवश्यकता होती है, जबकि MVC फ़िल्टर पंजीकरण यह सुनिश्चित करने के लिए जांचता है कि आपका वर्ग System.Web.Mvcनेमस्पेस में परिभाषित किए गए मुट्ठी भर फ़िल्टर इंटरफेस में से एक को विरासत में मिला है ।