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