2012-05-20 5 views
38

मैं एक परियोजना में वेब एपीआई और एएसपी.नेट एमवीसी पेज कैसे मिला सकता हूं?एक परियोजना में वेब एपीआई और एएसपी.नेट एमवीसी पेजों को मिलाकर

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

मैं दोनों नियंत्रकों UserController नाम नहीं कर सकता। इस के आसपास सबसे अच्छा तरीका क्या है? क्या मुझे एक UserApiController और अन्य उपयोगकर्ता नियंत्रक का नाम देना चाहिए? कोई अन्य सुझाव?

+0

स्पष्ट उत्तर दो नामकों को अलग-अलग नामों के साथ नामित करना है। आपको क्या करना है? – tzerb

+0

मैं सिर्फ एक ही प्रोजेक्ट में ऐसा करने की अनुमति देने के लिए एक सुरुचिपूर्ण संरचना की तलाश में हूं। मुझे लगता है कि एक अलग नामस्थान एक अच्छा विचार है। –

उत्तर

38

आप उन्हें अलग-अलग नामस्थानों में डाल सकते हैं, जैसे MyApp.Controllers.UsersController और MyApp.Controllers.WebAPI.UsersController।

यह आपको MVC और वेबएपीआई, जैसे में इसी तरह के यूआरआई मार्गों को बेनकाब करते हैं:

/users/1  << MVC view 
/api/users/1 << Web API 
+0

धन्यवाद। मुझे यह अलग-अलग नामित वर्गों से बेहतर पसंद है। –

+15

संयुक्त परियोजना में दोनों डिफ़ॉल्ट रूट्स को सेट करने का सही तरीका क्या है? – BuddyJoe

+0

@ माइक वासन बस स्पष्ट करने के लिए - क्या आप दो नेमस्पेस वाले एक नियंत्रक वर्ग का सुझाव दे रहे हैं? – AndrewRalon

8

WebAPI कार्यान्वयन एक अलग Area MVC आवेदन में के रूप में जोड़ा जाना चाहिए। यह एक प्राकृतिक फिट है। ऐसा करने से आपको माइक वासन ने अलग नामस्थान दिया है, साथ ही यह आपको/एपीआई रूटिंग सेट अप करने का एक प्राकृतिक तरीका भी देता है। आपको एक अलग मॉडल फ़ोल्डर

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

+1

क्षेत्रों के अंदर वेब एपीआई रखना संभव नहीं है। रूटिंग सिस्टम के अनुकूलन के बिना नहीं। – Vegar

+1

@ वेगर राउटिंग सिस्टम का अनुकूलन कठिन नहीं है, हालांकि: 'कॉन्फ़िगरेशन। रूट्स। मैपहट्प रूट (नाम:" डिफ़ॉल्ट एपीआई ", मार्ग टेम्पलेट:" एपीआई/{नियंत्रक}/{आईडी} ", डिफ़ॉल्ट: नया {id = रूट पैरामीटर। वैकल्पिक}); ' –

8

मैं नामस्थान नहीं बदला है, केवल एक चीज है कि मैं करना था

//First register WebApi router 
GlobalConfiguration.Configure(WebApiConfig.Register); 
//and register Default MVC Route after 
RouteConfig.RegisterRoutes(RouteTable.Routes); 

रजिस्टर WebAPI पहली बार था, और उसके बाद MVC मार्ग

और सब कुछ बहुत अच्छा काम करता है!

+1

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

+6

टिप्पणियां कोड के विपरीत लगती हैं ... टिप्पणियां एमवीसी तब वेबएपीआई कहती हैं, लेकिन कोड वेबएपी है तो एमवीसी –

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