2012-04-27 9 views
128

में जेएसओएन वापस करने के लिए वेबएपीआई या एमवीसी का उपयोग करना। मैं एक एएसपी.नेट एमवीसी एप्लीकेशन बना रहा हूं जो क्लाइंट-स्क्रिप्ट भारी है, यह डीओएम में हेरफेर करने के लिए जेएसओएन और jQuery का उपयोग करेगा।एएसपी.नेट

मेरे समझ दोनों वेब एपीआई नियंत्रक और MVC नियंत्रक JSON लौट सकते है।

मेरी परिदृश्य को देखते हुए, मैं एक वेब एपीआई नियंत्रक या एक MVC नियंत्रक इस्तेमाल करना चाहिए?

+0

संभावित डुप्लिकेट [एपीपीनेट एमवीसी में एपीकंट्रोलर और नियंत्रक के बीच अंतर] (http: // stackoverflow।कॉम/प्रश्न/9 4 9 4 9 66/अंतर-बीच-एपिकंट्रोलर-एंड-कंट्रोलर-इन-एएसपी-नेट-एमवीसी) – digawp

+0

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

उत्तर

150

वेब एपीआई नियंत्रक किसी भी एएसपी.NET अनुप्रयोग में बनाया और होस्ट किया जा सकता है, न केवल एमवीसी अनुप्रयोगों। इस प्रकार, वेब एपीआई बनाने का एक स्पष्ट कारण यह है कि यदि आपके पास एमवीसी फ्रंट-एंड नहीं है (उदाहरण के लिए क्लासिक, रीस्टफुल वेब-सर्विसेज आपकी कंपनी/संगठन द्वारा होस्ट की गई है।)

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

व्यक्तिगत रूप से, जब मैं एक व्यू() के साथ प्रतिक्रिया देना चाहता हूं, तो मैं एमवीसी नियंत्रकों का उपयोग करता हूं, और मैं किसी विशेष दृश्य पर निर्भर नहीं होने के लिए एक वेब एपीआई का उपयोग करूंगा।

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

व्यक्तिगत रूप से, मैं जेएसओएन-आधारित रीस्टफुल क्लाइंट को चलाने के लिए वेब एपीआई नियंत्रकों का उपयोग करता हूं, मैं मूल ब्राउज़र रूटिंग और एसपीए की डिलीवरी को संभालने के लिए एमवीसी नियंत्रकों का उपयोग करता हूं।

28

वेबएपीआई एक एपीआई बनाने के लिए है। यदि आप चाहते हैं कि कोई व्यक्ति आपके एपीआई एक्सएमएल, जेएसओएन, आदि में उपभोग करने में सक्षम हो। आप एक वेब एपीआई बना सकते हैं।

आपके मामले में आपको केवल JSON में क्लाइंट से बात करने की आवश्यकता है।

भले ही आपकी वेबसाइट अधिकतर ग्राहक स्क्रिप्ट संचालित है, फिर भी आप एएसपी.नेट एमवीसी नियंत्रक का उपयोग कर रहे होंगे? और चूंकि आप पहले से ही तर्कसंगत रूप से इकाइयों के आधार पर अपने नियंत्रकों को विभाजित कर चुके हैं, तो यह उन जेसन सेवा प्रथाओं को जोड़ने के लिए समझ में आता है क्योंकि विशेष रूप से वेब एपीआई के लिए एक और वर्ग बनाने के विरोध में।

तो आपकी विशेष स्थिति के लिए (यदि मैं सही ढंग से समझता हूं), तो मैं नियंत्रकों के साथ रहूंगा।

+0

धन्यवाद, क्या हम वेबएपीआई बनाम कंट्रोलर बनाने में एक अंतर रखते हैं? –

+1

@flybyte हाँ आपको एपीकंट्रोलर से प्राप्त करने की आवश्यकता है, http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api –

+4

देखें वेब एपीआई जेएसओएन, साथ ही आपके द्वारा सूचीबद्ध अन्य विधियों को भी कर सकता है। नियंत्रक cant (अच्छी तरह से) एक एपीआई में बदल दिया जा सकता है, तो उपयोगकर्ता को पूछने के लिए दूरदर्शिता है - मैं अधिक स्केलेबल/लचीला समाधान का उपयोग करने का सुझाव देना होगा। ऐसा नहीं है कि पुराने स्कूल डब्ल्यूसीएफ सेवाओं की तरह, वेब एपीआई आम तौर पर शक्तिशाली और लचीला दोनों होता है। इसलिए जब आपको केवल साधारण परिदृश्य की आवश्यकता होती है तो यह आपके रास्ते से बाहर रहता है। आपको बिजली की आवश्यकता होनी चाहिए आपको – steve

7

उत्तर चिंताओं को अलग करने, सेवाओं के निर्माण को तेज करने और कॉन्फ़िगरेशन के बजाय सम्मेलन पर भरोसा करने के लिए उबलता है।

नियंत्रक मुख्य जिम्मेदारी दृश्य और आपके मॉडल के बीच एक समन्वयक के रूप में काम करना है, लेकिन जहां एपीआई की मुख्य जिम्मेदारी डेटा पर काम करना है। एपीआई के सम्मेलनों के मामले में सीआरयूडी संचालन करने में वाकई आसान हो जाता है। पढ़ें

  • पोस्ट:: नीचे CRUD संचालन और HTTP क्रियाओं के बीच मानचित्रण

    • प्राप्त है बनाएं
    • रख: अद्यतन
    • हटाएँ: हटाएं

    तो एपीआई आप की जरूरत नहीं है के साथ अलग-अलग क्रियाएं बनाने और उन्हें HTTP क्रियाओं के साथ विशेषता बनाने के लिए।

  • 0

    एपीकंट्रोलर के साथ मेरी एकमात्र चिंता यह है कि यह साइट-आधारित क्षेत्र-आधारित नहीं है। आपके नियंत्रक विधियों को नाम देने के लिए एक साइट में केवल एक एपिकंट्रोलर सबफ़ोल्डर हो सकता है।

    domain.com/api/area1/controller1/

    domain.com/api/area2/controller1/

    मैं वहाँ याद रखें: वहां स्थितियों आप विभिन्न क्षेत्रों में नियंत्रक नाम डुप्लिकेट करना चाहते हो सकता है कुछ कस्टम कोड सेटिंग्स ऐसा करने में सक्षम हैं लेकिन यह डिफ़ॉल्ट रूप से काम नहीं करती है।

    +0

    यह एक टिप्पणी की तरह लगता है, जवाब नहीं। –

    +0

    वास्तव में आप जो भी कह रहे हैं उसे मत करो। यदि आप नियंत्रक Area1XController का नाम देते हैं तो आप कर सकते हैं: domain.com/Area1X/1, नियंत्रक बनाएं: Area2XController और उसके बाद इसे एक्सेस करें: domain.com/Area2X/1। बड़ा सवाल यह है कि आप वैसे भी ऐसा क्यों करना चाहते हैं। क्षेत्र का नाम सार है यह उपयोगकर्ता के लिए कुछ भी नहीं कहता है। यदि आपने 4 क्षेत्रों को कहने दिया है तो इसके लिए कार्यात्मक उद्देश्य नाम का उपयोग करना बेहतर होगा। –

    0

    मैं साथ शॉन विल्सन (ऊपर जवाब) जवाब सहमत लेकिन नहीं जानते कि क्यों के रूप में मैं सिर्फ एक बिट उलझन में हूँ और अभी भी निम्न (शायद गलत) अंदाज़ा साथ समझने की कोशिश कर -

    • उपयोग वेबएपीआई नियंत्रक वितरित करने के लिए क्लाइंट को JSON डेटा ताकि क्लाइंट दृश्य मैनिपुलेशन को संभाल सके। इस प्रक्रिया को देखने की आवश्यकता नहीं है बल्कि विधि (जिसे एक जावास्क्रिप्ट अनुरोध) कहा जाता है, उसके बजाय सिर्फ एक प्रतिक्रिया है ताकि ग्राहक किसी क्लाइंट-साइड मैनिपुलेशन को संभाल सके।
    • जब आप पेज_लोड (यानी एसपीए ऐप्स के लिए नहीं) के बाद या सही दृश्य में हेरफेर करने के लिए डेटा का उपयोग करने की आवश्यकता होती है तो एमवीसी नियंत्रक का उपयोग करें।

    तुम देखो, मैं तो बस पता नहीं कैसे मैं यहाँ ग़लत हूँ और उलझन में हूँ क्योंकि शॉन के जवाब की अंतिम पंक्ति में कहा गया है, "मैं बुनियादी ब्राउज़र मार्ग और स्पा के वितरण से निपटने के लिए MVC नियंत्रकों का उपयोग करें।" - शायद मुझे पूरी तरह से पता नहीं है कि एक आरामदायक ग्राहक क्या है जब मुझे लगता है कि यह जावास्क्रिप्ट विधि हो सकती है जो JSON रूप में प्रतिक्रिया प्राप्त करती है। यह स्टैकओवरफ्लो में सबसे नज़दीकी पोस्ट है जो दूरस्थ रूप से मेरे प्रश्न के उत्तर के रूप में संबंधित था इसलिए मैं संभवतः प्रश्नों को डुप्लिकेट करने के बजाय इस पोस्ट का जवाब दे रहा हूं।

    +0

    "** दृश्य वितरित करने के लिए एमवीसी नियंत्रक का उपयोग करें **" आप एक दृश्य में संरचना के लिए एसपीए को एमवीसी आंशिक रूप में लपेट सकते हैं। एएसपी.नेट एमवीसी देवताओं को इस अवधारणा को समझना चाहिए। आप क्लाइंट को एचटीएमएल + जेएस प्रस्तुत करने के लिए व्यू पीढ़ी (जैसे सर्वर-साइड प्रोसेसिंग) के दौरान नियमित रेजर + एएसपी.नेट सुविधाओं का उपयोग कर सकते हैं। समस्या कई देवताओं का अनुभव यहां होगा यह विचार है कि * स्थिर एचटीएमएल + जेएस फाइलें एसपीए * एसपीए नहीं बनाती हैं। * कभी-कभी सामग्री को गतिशील * की आवश्यकता होती है, और उपयोगकर्ता के लिए विशिष्ट होती है, लेकिन सभी ढांचे इस तथ्य से अलग हो जाते हैं। * "एसपीए" और "एमवीसी" परस्पर अनन्य नहीं हैं। * –

    0

    इस परिदृश्य में, मैं वेबएपीआई की अनुशंसा करता हूं क्योंकि यह जावास्क्रिप्ट अनुरोधों के आधार पर डेटा स्थानांतरित करने के लिए एकदम सही है। मैं आमतौर पर अपने वेबएपीआई नियंत्रकों को विकसित करूंगा ताकि वे एक JSON अनुकूल ऑब्जेक्ट लौटा सकें जिसे बाद में मेरे जावास्क्रिप्ट द्वारा पार्स किया जा सके।

    एकमात्र वास्तविक समय जहां आप इस तरह की चीज़ के लिए एक एमवीसी नियंत्रक पर एक क्रिया का उपयोग करना चाहते हैं, यदि आप कुछ HTML उत्पन्न करना चाहते हैं और जावास्क्रिप्ट कॉल के साथ अपने पृष्ठ के सेगमेंट को प्रतिस्थापित करना चाहते हैं।

    उदाहरण के लिए:

    आप एक jQuery के यूआई datepicker है पर चयन रेडियो बटन है कि चुने हुए दिन के ईवेंट का प्रतिनिधित्व करते हैं की एक सूची उत्पन्न करता है।

    इस परिदृश्य में, आप कुछ JSON वापस करने के लिए WebApi का उपयोग कर सकते हैं और फिर जावास्क्रिप्ट का उपयोग करके आवश्यक HTML उत्पन्न कर सकते हैं लेकिन आमतौर पर जावास्क्रिप्ट का उपयोग करके बहुत सारे HTML बनाने के लिए यह खराब अभ्यास है। सी # को एचटीएमएल बनाने के लिए बेहतर होगा और फिर इसे आंशिक दृश्य के माध्यम से वापस कर दें क्योंकि इस तरह आपको जावास्क्रिप्ट पार्सिंग के साथ त्रुटियों का सामना करने की संभावना कम है। उल्लेख नहीं है कि यह HTML को लिखना बहुत आसान बनाता है।