2012-06-23 15 views
8

मैं asp.net वेब एपीआई पर काम कर रहा हूँ। मैं, Global.asax फ़ाइल की तरह में अपने प्रोजेक्ट के लिए डिफ़ॉल्ट मार्ग स्थापित करने के लिए कोशिश कर रहा हूँकैसे asp.net वेब एपीआई में डिफ़ॉल्ट मार्ग बदलने के लिए

localhost:45678/api/Products 

लेकिन मैं did not

url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

यह हमेशा पुनर्निर्देश तरह MVC मार्ग मॉडल asp.NET करने के लिए किसी भी इसी तरह प्रारूप लगता है मुझे होम पेज (होमकंट्रोलर) पर। कृपया मेरा मार्ग दर्शन कीजिए।

+0

"यह हमेशा मुझे होम पेज पर रीडायरेक्ट करता है" का क्या मतलब है। क्या आपका मतलब है कि जब आप लोकलहोस्ट पर जाते हैं: 45678/एपीआई/उत्पाद यह आपको रीडायरेक्ट करता है या जब आप विजुअल स्टूडियो से अपना प्रोजेक्ट चलाते हैं तो पहला पृष्ठ जिस पर आप उतरते हैं वह आपका होम पेज है? –

+0

जब मैं अपनी परियोजना चलाता हूं तो यह मुझे होम पेज पर रीडायरेक्ट करता है। –

+0

मैंने आपकी टिप्पणी के जवाब में अपना जवाब अपडेट कर दिया है। –

उत्तर

8

अपने App_Start फ़ोल्डर में अपने अपने RouteConfig वर्ग की जाँच करें। आपको नीचे दिया गया डिफ़ॉल्ट मार्ग देखना चाहिए जिसे आप बदल सकते हैं।

 routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

संपादित

अपनी टिप्पणी पढ़ने के बाद, मुझे लगता है कि समस्या अपने मार्गों के साथ नहीं है। मुझे यकीन है कि तुम क्यों चाहेगा यह करने के लिए नहीं कर रहा हूँ, लेकिन आप केवल अपनी परियोजना के लिए प्रारंभ URL निर्दिष्ट करने की जरूरत है। राइट क्लिक करें अपने वेब परियोजना - गुण क्लिक करें - वेब टैब पर क्लिक करें - के तहत प्रारंभ Action का चयन करें प्रारंभ यूआरएल और बॉक्स में http://localhost:45678/api/Products दर्ज करें। अपनी परियोजना को सहेजें और फिर से चलाएं। यह नए स्थान पर शुरू होना चाहिए।

+0

मैंने ग्लोबल.एक्सएक्स 'रूट्स में इस कोड के साथ प्रयास किया है। मैपहट्प रूट ( नाम: "डिफॉल्टएपीआई", मार्ग टेम्पलेट: "एपीआई/{नियंत्रक}/{आईडी}", डिफ़ॉल्ट: नया {नियंत्रक = "उत्पाद", आईडी = रूट पैरामीटर। वैकल्पिक} ); लेकिन यह अभी भी होम पेज पर रीडायरेक्ट करता है। मुझे App_Start –

+0

में रूट कॉन्फिग क्लास नहीं मिला है क्या आपके पास एपीकंट्रोलर से विरासत में "प्रोडक्ट कंट्रोलर" नामक नियंत्रक है और क्या आपके पास इस नियंत्रक पर "सार्वजनिक IENumerable प्राप्त करें()" विधि है? –

+0

हाँ सर मेरे पास 'सार्वजनिक आईनेमेरेबल GetAll() { रिटर्न उत्पाद है; } 'उत्पादों में नियंत्रक: एपीकंट्रोलर –

4

मुद्दा आम गलती है कि लोगों का लगभग बहुत सारी में हो सकता है।

तथ्य है कि यहाँ सभी मार्गों System.Web.Routing.RouteTable.Routes संग्रह के तहत ढांचे आप उपयोग की परवाह किए बिना एकत्र करने के लिए है। इसलिए, यदि आप एएसपी.नेट वेब एपीआई रूट से पहले एएसपी.नेट एमवीसी डिफ़ॉल्ट मार्ग डालते हैं, तो एएसपी.नेट वेब एपीआई रूट स्कैन नहीं किया जाएगा क्योंकि एमवीसी रूट एक मैच होगा।

मैं इस संभालने हूँ कि तुम क्या अब तक प्रदान की है को देखकर यहां मामला है। यदि ऐसा नहीं है, तो वहां कहीं भी पूर्ण समाधान अपलोड करें और लोग पूरी तरह से देख सकें।

+0

तो क्या मुझे पता चलेगा कि इसके लिए क्या करना है? –

0

[संपादित करें: मेरा जवाब रूप में ही है केविन की]

आप कह रहे हैं कि जब आप दृश्य स्टूडियो से परियोजना चलाने के लिए, यह परियोजना मुख पृष्ठ पर एक ब्राउज़र को खोलता है?

वेब API प्रोजेक्ट टेम्पलेट एक MVC नियंत्रक के साथ साथ एक वेब एपीआई नियंत्रक शामिल हैं।

यूआरआई "http: // localhost: xxxx /" एमवीसी नियंत्रक चला जाता है, जबकि "http: // localhost: xxx/api/products" एपीआई नियंत्रक के पास जाता है।

जब आप दृश्य स्टूडियो में परियोजना चलाने के लिए, यह नेविगेट जाएगा "http: // localhost: xxxx" डिफ़ॉल्ट रूप से। सामान्य ऑपरेशन में, एक ग्राहक अनुरोध करेगा कि वह जो भी यूआरआई चाहता था।

आप के तहत प्रोजेक्ट गुण/वेब/प्रारंभ कार्रवाई दृश्य स्टूडियो सेटिंग्स बदल सकते हैं।

1

वास्तव में अगर हम स्थिति गुण> वेब में डिफ़ॉल्ट मार्ग स्थापित करने के लिए कर रहे हैं> स्थान शुरू करते हैं। तो global.asax फ़ाइल में रूट टेबल, कस्टम रूट, रजिस्टर रूट की आवश्यकता क्या है।मैं इस तरह के लिए पहले यह की तरह लगता है पर

की कोशिश की,

routes.MapHttpRoute(
    name: "Default Api", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

अब मैं localhost:xxxx/api/products अपने वेब एपीआई तो के लिए डिफ़ॉल्ट मार्ग के रूप में करना चाहते हैं,

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/Products/{id}", 
    defaults: new { controller = "Products", id = RouteParameter.Optional } 
); 

लेकिन कोई फायदा नहीं के परिणाम ।

+2

क्या आप उत्तर के रूप में अद्यतन पोस्ट करने के बजाय अपना प्रश्न सुधार सकते हैं?(एसई एक मंच के रूप में काम नहीं करता है) धन्यवाद –

+1

लींड्रो सही है, इसे मूल प्रश्न में संपादित किया जाना चाहिए। हटाने की सिफारिश। –

0

मुझे लगता है कि आपने समाधान के आसपास नृत्य किया है लेकिन सिर्फ निशान को याद किया है। इस प्रयास करें:

  1. सुनिश्चित करें कि आप GlobalConfiguration.Configure (WebApiConfig.Register) बुला रहे हैं करते हैं; आपके global.asax.cs में।

    routes.MapHttpRoute (नाम:: "DefaultApi", routeTemplate:

  2. WebApiConfig.Register() में के रूप में डिफ़ॉल्ट मार्ग में सेट करें "API/{नियंत्रक}/{आईडी}", चूक: नए {नियंत्रक = "उत्पाद", आईडी = रूट पैरामीटर। वैकल्पिक});

    स्थानीय होस्ट: 45678

गुड लक

  • अपने वेब परियोजना सेटिंग्स में के रूप में सेट करें कि आप "प्रारंभ यूआरएल" संपत्ति ले ली है।

  • 0

    व्यवस्थापक अनुमति के साथ वीएस को पुनरारंभ करना मेरे लिए इस समस्या को हल करता है। पर्यावरण जानकारी: - ओएस: विंडोज 10 (64 बिट) - विजुअल स्टूडियो: 2017.

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