2010-01-18 13 views
17

का उपयोग करके किसी पृष्ठ को कब कॉल किया जाता है, यह पता लगाने के लिए कि एपैक्स एमवीसी में AJAX का उपयोग करके किसी पृष्ठ को कब कॉल किया जाता है?asp.net mvc: एजेक्स

उत्तर

35

व्यावसायिक एएसपी.नेट एमवीसी 1.0 पुस्तक के मुताबिक, एमवीसी AJAX लाइब्रेरी एक फॉर्म फ़ील्ड डालेगी जिसे "एक्स- "XMLHttpRequest" के मान के साथ अनुरोध किया गया।

आप सिस्टम.Web.Mvc में एक एक्सटेंशन विधि का उपयोग कर सकते हैं जिसका अर्थ है कि आप आसानी से Request.IsAjaxRequest() पर कॉल कर सकते हैं और यह एक साधारण सत्य या झूठी कहानियां प्राप्त कर सकता है यदि यह एक AJAX अनुरोध है।

+0

हालांकि यह ज्यादातर मामलों में भरोसेमंद होगा, मुझे लगता है कि पूछताछकर्ता को पता होना चाहिए कि यह आसानी से * धोखा दिया जा सकता है। –

+0

कृपया ध्यान दें: बड़ी संख्या में अनुरोध के साथ एक परियोजना पर, मुझे यादृच्छिक रूप से उन मोबाइल ब्राउज़र से अजाक्स अनुरोध प्राप्त हुए जिनके पास 'Request.IsAjaxRequest() 'झूठ लौट रहा था !!! मुझे सुरक्षित अनुरोध पर होने के अनुरोधों में एक क्वेरीस्ट्रिंग पैरामीटर (जैसे 'आंशिक = 1') जोड़ना पड़ा। –

5

यह निर्धारित करने का कोई विशिष्ट तरीका नहीं है कि कॉल जावास्क्रिप्ट द्वारा या सीधे ब्राउज़र में किया गया था, क्योंकि यह एक नियमित http कॉल है।

आप अन्य कॉल से अलग करने के लिए अपने AJAX कॉल में हेडर जोड़ सकते हैं, या संभवतः क्वेरी स्ट्रिंग में पैरामीटर जोड़ सकते हैं जिसका उपयोग केवल AJAX कॉल पर किया जाता है।

एएसपी.नेट एमवीसी AJAX इस तरह के एक हेडर जोड़ता है - X-Requested-With: XMLHttpRequest, जिसे आप स्नीफ करने के लिए उपयोग कर सकते हैं कि यह mvc AJAX लाइब्रेरी द्वारा अजाक्स कॉल है। हालांकि, अगर आप jQuery का उपयोग कर रहे हैं या अपने हाथ से एजेक्स कॉल लुढ़का रहे हैं, तो यह सेट नहीं होगा। इसके अतिरिक्त, अन्य क्लाइंट इस हेडर को खराब कर सकते हैं (उदाहरण के लिए, वेब क्लाइंट का उपयोग करके) ताकि यह पता चल सके कि एजेक्स कॉल किया गया है।

+0

+1 बड़ी संख्या में अनुरोधों के साथ एक परियोजना के रूप में पैरामीटर का सुझाव देने के लिए +1, मुझे यादृच्छिक रूप से उन मोबाइल ब्राउज़र से अजाक्स अनुरोध प्राप्त हुए जिनके पास 'Request.IsAjaxRequest() 'झूठ लौट रहा था !!! मुझे सुरक्षित अनुरोध पर होने के अनुरोधों में एक क्वेरीस्ट्रिंग पैरामीटर (जैसे 'आंशिक = 1') जोड़ना पड़ा। –

0

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

-7

इससे कोई फर्क क्यों पड़ता है? यह नहीं होना चाहिए। क्या आप वास्तव में सामग्री बातचीत करने की कोशिश कर रहे हैं?

+1

इससे कोई फर्क नहीं पड़ता। उदाहरण के लिए, हो सकता है कि आप एक पूर्ण HTML पृष्ठ वापस नहीं करना चाहें, लेकिन केवल आंशिक। – jgauffin

+0

फिर यूआरएल में एक पैरामीटर जोड़ें।अलग-अलग सामग्री की सेवा करना सिर्फ इसलिए कि किसी भिन्न प्रकार के क्लाइंट से उत्पन्न अनुरोध खराब डिज़ाइन है। यह विधि AJAX अनुरोधों के लिए उस व्यवहार को ताला लगा देती है। क्या होगा यदि आप बाद में पूरे पृष्ठ की सामग्री AJAX के माध्यम से प्राप्त करना चाहते हैं (ओह, नहीं कर सकते)। क्या होगा यदि आप बाद में एक डेस्कटॉप ऐप लिखते हैं जो आंशिक सामग्री चाहता है (ओह, ऐसा नहीं कर सकता है, क्योंकि यह अजाक्स अनुरोध नहीं है)। – Ryan

+0

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

7

आप इसे मैन्युअल रूप से जांच कर सकते हैं इस तरह:

bool isAjaxRequest = request.Headers["X-Requested-With"] == "XMLHttpRequest"; 

या जब आप ASP.NET MVC, जो संदर्भ देता System.Web.Mvc में एक नियंत्रक में हैं आप HttpRequestBase पर एक extension-method मिल जाएगा वस्तु, तो आप इस तरह एक ActionMethod भीतर पहुंच सकते हैं: यदि अनुरोध एक ajax अनुरोध है

bool isAjaxRequest = Request.IsAjaxRequest(); 
+0

कृपया ध्यान दें: बड़ी संख्या में अनुरोध के साथ एक परियोजना पर, मुझे यादृच्छिक रूप से उन मोबाइल ब्राउज़र से अजाक्स अनुरोध प्राप्त हुए जिनके पास 'Request.IsAjaxRequest() 'झूठ लौट रहा था !!! मुझे सुरक्षित अनुरोध पर होने के अनुरोधों में एक क्वेरीस्ट्रिंग पैरामीटर (जैसे 'आंशिक = 1') जोड़ना पड़ा। –

4

सबसे अच्छा तरीका है की जाँच करने के Request.IsAjaxRequest() जाँच करने के लिए है। यह जानना अच्छा है कि हुड के तहत, एमवीसी फ्रेमवर्क अनुरोध पैरामीटर या अनुरोध शीर्षलेख में AJAX अनुरोधों की जांच करता है। ASP.Net MVC स्रोत कोड में कोड है:

public static bool IsAjaxRequest(this HttpRequestBase request) { 
     if (request == null) { 
      throw new ArgumentNullException("request"); 
     } 

     return (request["X-Requested-With"] == "XMLHttpRequest") || ((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest")); 
    } 

तो तुम दोनों की जाँच करने के लिए है कि आप इसे mannually जाँच करने के लिए (जो अनुशंसित नहीं है) चाहते हैं।