asp.net कोर मिडिलवेयर बनाम फ़िल्टर


86

Asp.net कोर मिडलवेयर के बारे में पढ़ने के बाद, मुझे भ्रम है कि मुझे कब फिल्टर का उपयोग करना चाहिए और जब मैं एक ही लक्ष्य को प्राप्त करने के लिए लगता है तो मुझे मध्यवर्ग का उपयोग करना चाहिए। कब फिटर्स के बजाय मिडवेयर्स का इस्तेमाल करना चाहिए?


1
यह दस्तावेज़ उस विशिष्ट प्रश्न को लक्षित करता है। docs.microsoft.com/en-us/aspnet/core/mvc/controllers/…
Nkosi

जवाबों:


80

चैनल 9 पर इस बारे में एक वीडियो है: ASP.NET राक्षस # 91: मिडिलवेयर बनाम फिल्टर । वीडियो को सारांशित करने के लिए:

अनुरोध का निष्पादन शुरू होता है और हमारे पास एक मिडलवेयर और एक अन्य मिडलवेयर है, इसे "गुड़िया के अंदर रूसी गुड़िया" की तरह सोचें और अंततः राउटिंग मिडलवेयर को किक करता है और फिर अनुरोध एमवीसी पाइपलाइन में चला जाता है। यहां छवि विवरण दर्ज करें इसलिए यदि आपको MVC के संदर्भ की आवश्यकता नहीं है (मान लें कि आप प्रवाह और निष्पादन के बारे में चिंतित हैं, जैसे हेडर से कुछ पूर्व-मार्ग तंत्र, आदि का जवाब देना) तो बिचौलियों का उपयोग करें ।
लेकिन अगर आपको एमवीसी के संदर्भ की आवश्यकता है और आप कार्यों के खिलाफ काम करना चाहते हैं तो फ़िल्टर का उपयोग करें ।


इसलिए, अगर मेरे पास तर्क है, तो मैं हर अनुरोध (उदाहरण के लिए लॉगिंग) पर चलना चाहता हूं, जिसमें से कुछ केवल एमवीसी से संबंधित हैं, मैं इसे मिडलवेयर में डालूंगा, फिर फ़िल्टर हैंडलर को उसके लिए जो भी विशिष्ट तर्क की आवश्यकता हो, कर सकते हैं मिडलवेयर के लिए पुनर्खरीद?
टेरी एच

64

मिडलवेयर ASP.NET कोर के स्तर पर काम करता है और आवेदन पर आने वाले हर एक अनुरोध पर कार्य कर सकता है।

दूसरी ओर MVC फ़िल्टर केवल उन अनुरोधों के लिए चलते हैं जो MVC में आते हैं।

उदाहरण के लिए, यदि मैं यह लागू करना चाहता था कि सभी अनुरोध HTTPS से अधिक होने चाहिए, तो मुझे इसके लिए एक मिडलवेयर का उपयोग करना होगा। अगर मैंने ऐसा MVC फ़िल्टर बनाया, जो उपयोगकर्ताओं को अभी भी HTTP पर स्थिर फ़ाइलों जैसे अनुरोध कर सकता है।

लेकिन फिर दूसरी ओर एमवीसी नियंत्रकों में अनुरोधों को लॉग करने वाली कुछ चीजें बिल्कुल एक्शन फिल्टर हो सकती हैं।


3

के निष्पादन middlewareसे पहले होता है MVC संदर्भ पाइप लाइन में उपलब्ध हो जाता है। अर्थात्, उदाहरण के लिए ActionFilter के मामले में या के middlewareलिए उपयोग नहीं है । आपके पास क्या पहुंच है , जो आपको अनुरोध पर और साथ ही प्रतिक्रिया पर कार्रवाई करने की अनुमति देगा। चूंकि मॉडल बाइंडिंग अभी तक नहीं हुई है, इसलिए मिडलवेयर का उपयोग सत्यापन फ़ंक्शन या मानों को संशोधित करने के लिए अनुकूल नहीं होगा। प्रत्येक अनुरोध पर भी चलेगा, भले ही नियंत्रक या कार्रवाई को कहा जाए।ActionExecutingContextActionExecutedContextHttpContextMiddleware

दूसरी ओर, filtersकेवल निर्दिष्ट कार्यों और नियंत्रकों पर चलेगा जब तक कि आप स्टार्टअप में विश्व स्तर पर फ़िल्टर को पंजीकृत न करें। चूँकि आपके पास संदर्भ के लिए पूर्ण पहुंच है, आप नियंत्रक और कार्रवाई को स्वयं भी एक्सेस कर सकते हैं।

स्रोत और उदाहरण: dotnetcultist.com

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.