मैं एक आवेदन के लिए सेवा परत बनाने के लिए एमवीसी 4 वेब एपीआई का उपयोग कर रहा हूं। मैं एक वैश्विक फ़िल्टर बनाने की कोशिश कर रहा हूं जो एपीआई के सभी आने वाले अनुरोधों पर कार्य करेगा। अब मैं समझता हूं कि इसे मानक एमवीसी ग्लोबल एक्शन फ़िल्टर से अलग कॉन्फ़िगर किया जाना है। लेकिन मुझे काम करने के लिए ऑनलाइन खोज रहे कुछ उदाहरण प्राप्त करने में समस्याएं आ रही हैं।एमवीसी 4 वेब एपीआई रजिस्टर फ़िल्टर
जिस समस्या में मैं चल रहा हूं वह वेब एपीआई के साथ फ़िल्टर पंजीकृत करने में है।
मैं
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
MVCConfig.RegisterRoutes(RouteTable.Routes);
MVCConfig.RegisterGlobalFilters(GlobalFilters.Filters);
WebApiConfig.RegisterRoutes(GlobalConfiguration.Configuration);
WebApiConfig.RegisterGlobalFilters(GlobalConfiguration.Configuration.Filters);
}
}
मेरे मानक Mvc मार्ग और फिल्टर सही ढंग से काम मेरी Global.asax इस तरह की स्थापना की है ...। जैसा कि मेरी वेबएपी रूटिंग करता है। यहाँ मैं अपने WebAPI फिल्टर पंजीकरण के लिए है
public static void RegisterGlobalFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new PerformanceTestFilter());
}
,
public class PerformanceTestFilter : ActionFilterAttribute
{
private readonly Stopwatch _stopWatch = new Stopwatch();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
_stopWatch.Reset();
_stopWatch.Start();
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
_stopWatch.Stop();
var executionTime = _stopWatch.ElapsedMilliseconds;
// Do something with the executionTime
}
}
इस फिल्टर ठीक काम करता है जब यह मानक Mvc GlobalFilterCollection के साथ पंजीकृत है ... और यहाँ PerformanceTestFilter है ... लेकिन जब मैं इसे System.Web.Http.Filters.HttpFilterCollection के साथ पंजीकृत करने का प्रयास करता हूं तो मुझे यह कहते हुए एक त्रुटि मिलती है कि यह पैरामीटर प्रकार System.Web.Http.Filters.IFilter को असाइन करने योग्य नहीं है।
तो मुझे लगता है कि मेरे प्रदर्शनटेस्टफिल्टर को वेबपै फ़िल्टर के रूप में पंजीकृत होने के लिए ActionFilterAttribute के अलावा किसी अन्य चीज़ से प्राप्त करने की आवश्यकता है। मुझे यकीन नहीं है कि यह क्या होना चाहिए।
मुझे कल्पना है कि मुझे क्रमशः एमवीसी और वेबपी के साथ काम करने के लिए दो अलग-अलग फ़िल्टर बनाने की आवश्यकता होगी। यदि फ़िल्टर बनाने का कोई तरीका है जो दोनों के लिए पंजीकृत हो सकता है, तो यह बहुत अच्छा होगा। लेकिन मेरी प्राथमिक चिंता बस इसे वेबपी के लिए काम करने के लिए है।
धन्यवाद
ठीक है, इस समाधान ने मेरी परियोजना को बनाने की अनुमति दी है और मेरे पास वेब एपीआई के लिए "System.Web.Http.Filters.HttpFilterCollection" और मानक एमवीसी एक्शन फ़िल्टरिंग के लिए "ग्लोबलफिल्टर कोलेक्शन" दोनों में मेरा फ़िल्टर पंजीकृत है। हालांकि, जब मैं एपीआई तरीकों में से एक पर नेविगेट करता हूं, तो फ़िल्टर निष्पादित नहीं किया जा रहा है। फ़िल्टर मानक एमवीसी नियंत्रक कार्यों के लिए काम कर रहा है, लेकिन वेब एपीआई विधियों के लिए नहीं। कोई सुझाव? – jdavis
नया सवाल बनाएं।टिप्पणियों में नए प्रश्न मत पूछो। –
@ सैम, आप स्वयं को जोड़ने से पहले फ़िल्टर संग्रह को क्यों साफ़ करते हैं? – Vegar