2012-07-19 11 views
16

मैंने अभी वीएस 2012 आरसी का उपयोग करना शुरू कर दिया है, और मैं एक एएसपी.नेट एमवीसी 4 वेब एप्लिकेशन बना रहा हूं जिसमें मैं एक HTML- आधारित यूजर इंटरफेस और एक वेबएपी-आधारित प्रोग्रामिंग इंटरफ़ेस प्रदान करने की योजना बना रहा हूं।क्या मेरे पास एक ही चीज के लिए नियंत्रक और एपीकंट्रोलर दोनों हो सकते हैं?

मेरी HTML वेबसाइट के लिए, मैं इतना है कि, उदाहरण के लिए, मेरे ClientController के लिए URL /client हुक अपने मॉडल "सम्मेलन" (MVC!), और रूटिंग काम करता है से प्रत्येक के लिए एक नियंत्रक और दृष्टिकोण है। मेरा ClientControllerController से निकला है।

मेरे एपीआई के लिए, मैं ApiController से प्राप्त नए नियंत्रक बनाएगा। मैं स्वाभाविक रूप से चाहता हूं कि मेरे एपीआई यूआरएल मेरे एचटीएमएल यूआरएल के समान हों, इसलिए मैं ग्राहक जानकारी /api/client पर उपलब्ध होना चाहता हूं। हालांकि, उप-सम्मेलन रूटिंग के साथ, यह सुझाव देगा कि मुझे ClientController नामक एपीकंट्रोलर की आवश्यकता है। और मेरे पास पहले से ClientController कक्षा है।

मैं इससे कैसे निपटूं? क्या मुझे कस्टम रूटिंग की आवश्यकता है? क्या मैं एपीआई कक्षाओं को अलग-अलग नामस्थान में डालता हूं ताकि मैं उन्हें वही नाम दे सकूं?

अद्यतन: इस सवाल का सुझाव देने के लिए मेरी एपीआई नियंत्रकों के लिए एक अलग नाम स्थान में है कि लगता है मैं की जरूरत है: Mix web api controllers and site controllers

+0

क्या आपने [एमवीसी क्षेत्र] (http://msdn.microsoft.com/en-us/library/ee671793.aspx) देखा है? – gordonmleigh

+0

@gordonml: धन्यवाद - मैंने अभी किया, और ऐसा लगता है कि यह बहुत उपयोगी है। हालांकि मैं यह महसूस करने में मदद नहीं कर सकता कि मुझे जो हासिल करने की आवश्यकता है उसके लिए यह थोड़ा अधिक है। –

+0

IsAjaxRequest आपकी आवश्यकताओं के लिए काम करता है? http://stackoverflow.com/questions/1681563/detecting-isajaxrequest-with-asp-net-mvc-and-jquery-form-plugin-file-upload – kenny

उत्तर

12

नियंत्रक कक्षाओं के लिए एक अलग नामस्थान में होना आवश्यक है, और सब ठीक है।

एमवीसी क्षेत्रों का उपयोग करना भी काम करेगा (जैसा कि गॉर्डनमल की टिप्पणी में सुझाया गया है), लेकिन यह प्रभावी ढंग से नियंत्रकों को विभिन्न नामस्थानों में रखता है, इसलिए यह एक ही परिणाम प्राप्त करने का एक और औपचारिक तरीका है।

2

आप following blog post जो दिखाता है कि कैसे एक एपीआई नियंत्रक के रूप में उस्तरा बार देखा गया सेवा कर सकता है पर एक नज़र लग सकता है कुंआ। मूल रूप से वह RazorEngine का उपयोग करता है ताकि रेजर व्यू एंड को पार्स किया जा सके।

+1

एर ...धन्यवाद, लेकिन यह जो मैं कोशिश करने की कोशिश कर रहा हूं उसके ध्रुवीय विपरीत की तरह दिखता है, जिसमें मैं इसे ऐसा करने के लिए "इसे एमवीसी 4 रास्ता" करने की कोशिश कर रहा हूं, जिसे इसे डिजाइन नहीं किया गया था। –

+0

इसके अलावा, मेरे दो यूआरएल पूरी तरह से अलग चीजें करेंगे। मेरा सामान्य यूआरएल सभी प्रकार की चीजें करने के लिए यूजर इंटरफेस प्रस्तुत करता है। मेरा एपीआई यूआरएल बस डेटा तक पहुंच प्रदान करता है। तो यह वास्तव में विभिन्न प्रारूपों में "एक ही सामग्री" को वापस करने का सवाल नहीं है। –

+1

इस मामले में '/ api' उपसर्ग आपको परेशान नहीं करना चाहिए क्योंकि यह शेष एप्लिकेशन से कुछ अलग करता है। यह आपको वेबसाइट से एपीआई भाग को स्पष्ट रूप से अलग करने की अनुमति देता है। –

1

कैसे WebAPI परियोजना पर यह करने के लिए पर कदम मार्गदर्शन द्वारा कदम की तलाश में किसी को भी के लिए:

  1. दो फ़ोल्डर्स/नामस्थान बनाएँ, अर्थात्: ControllersApi और ControllersWeb
  2. सही ControllersWeb पर क्लिक करें और Add -> Controller जाएं और MVC 5 Controller - Empty। यदि आप उन्हें अपने वेबएपीआई प्रोजेक्ट में नहीं रखते हैं तो यह अन्य सभी निर्भरताओं को जोड़ देगा।
  3. आपका RouteConfig अब उन कक्षाओं को पंजीकृत करेगा जो Controller बेस क्लास से प्राप्त होते हैं। आप की संभावना नियंत्रक डिफ़ॉल्ट लिंक जोड़ने के लिए, संपादन चूक कहने के लिए द्वारा की आवश्यकता होगी: defaults: new { action = "Index", controller = "Home", id = UrlParameter.Optional }

यह है कि, अब आप साइट चलाने के लिए और दोनों एपीआई और वेब नियंत्रकों का उपयोग कर सकते हैं।

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

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