2012-06-20 16 views
39

ऐसा लगता है कि इन दोनों का एक समान उद्देश्य है। दूसरे उदाहरणों, पेशेवरों और विपक्षों का उपयोग करने के साथ-साथ महत्वपूर्ण अंतर क्या हैं, यह इंगित करने के लिए कुछ उदाहरण देखना बहुत अच्छा होगा।HttpMessageHandler बनाम ActionFilter का उपयोग कब करें?

+1

http://forums.asp.net/t/1804456.aspx – user960567

+3

एचटीपी मैसेज हैंडलर बनाम * ग्लोबल * एक्शनफिल्टर का उपयोग करने के लिए बेहतर सवाल हो सकता है। यह थोड़ा और आलसी लगता है। –

उत्तर

53

उनके दोनों के बीच बड़ा अंतर उनका ध्यान है। संदेश हैंडलर सभी HTTP अनुरोधों पर लागू होते हैं। वे एक HTTP मध्यस्थ के कार्य निष्पादित करते हैं। फ़िल्टर केवल उन अनुरोधों पर लागू होते हैं जो विशेष नियंत्रक/क्रिया पर प्रेषित होते हैं जहां फ़िल्टर लागू होता है।

जब आप व्यवहार को के अनुरोधों के विशाल बहुमत पर लागू करना चाहते हैं तो आपको संदेशहैंडलर का उपयोग करना चाहिए। पर फ़िल्टर का उपयोग किया जाना चाहिए, वे केवल कुछ संसाधनों पर लागू होते हैं।

enter image description here

+6

फ़िल्टर सभी HTTP अनुरोधों पर भी लागू किए जा सकते हैं, यदि उन्हें वैश्विक फ़िल्टर के रूप में जोड़ा गया है। – frennky

+2

यह कहां से है? –

+2

http://blogs.msdn.com/b/kiranchalla/archive/2012/05/05/asp-net-mvc4-web-api-stack-diagram.aspx –

26

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

संदेश संचालकों प्रक्रिया में पहले क्रियान्वित कर रहे हैं, और भी बहुत फिल्टर से कच्चे अनुरोध/प्रतिक्रिया मूल्यों के करीब संचालित (बहुत अमीर HttpActionContext और HttpActionExecutedContext वस्तुओं फिल्टर के भीतर उपलब्ध साथ HttpRequestMessage/HttpResponseMessage संचालकों में इस्तेमाल किया वस्तुओं विपरीत)। इससे उन्हें कुछ गतिविधियों के लिए संभावित रूप से अधिक कुशल बनाता है, उदाहरण के लिए, यदि आप यह निर्धारित करने की कोशिश कर रहे हैं कि आपको अनुरोध को जल्दी समाप्त करने की आवश्यकता है या नहीं। यदि आपको पता है कि अनुरोध अस्वीकार कर दिया जाना चाहिए, तो एक हैंडलर आपको वेबएपीआई इंफ्रास्ट्रक्चर को नियंत्रक को तत्काल करने, मॉडल बाध्यकारी आदि करने के प्रयास में चला गया है।

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

संबंधित मुद्दे