सवाल कई प्रकार पाए गए जो 'होम' नामक नियंत्रक से मेल खाते हैं


मेरे पास वर्तमान में ऑनलाइन होस्ट की गई दो असंबद्ध एमवीसी 3 परियोजनाएं हैं।

एक ठीक काम करता है, दूसरा काम नहीं करता है, मुझे त्रुटि दे रहा है:

कई प्रकार पाए गए जो 'होम' नामक नियंत्रक से मेल खाते हैं। इस   ऐसा हो सकता है कि वह मार्ग जो इस अनुरोध को सेवा देता है   ('{नियंत्रक} / {action} / {id}') खोज करने के लिए नामस्थान निर्दिष्ट नहीं करता है   एक नियंत्रक के लिए जो अनुरोध से मेल खाता है।

यदि यह बात है तो,   'MapRoute' विधि का अधिभार कॉल करके इस मार्ग को पंजीकृत करें   जो 'नेमस्पेस' पैरामीटर लेता है।

जिस तरह से मेरा होस्टर काम करता है वह यह है कि वह मुझे एफ़टीपी एक्सेस देता है और उस फ़ोल्डर में मेरे पास दो अन्य फ़ोल्डर हैं, जो मेरे प्रत्येक एप्लिकेशन के लिए एक है।

ftpFolderA2 / foo.com

ftpFolderA2 / bar.com

foo.com ठीक काम करता है, मैं अपने आवेदन को अपने स्थानीय फाइल सिस्टम में प्रकाशित करता हूं, फिर सामग्री को एफ़टीपी करता हूं और यह काम करता है।

जब मैं अपलोड करता हूं और बार.com चलाने की कोशिश करता हूं, तो ऊपर की समस्या आग लगती है और मुझे अपनी साइट का उपयोग करने से रोकती है। सब कुछ foo.com अभी भी काम करता है

क्या bar.com ftpFolderA2 के अंदर हर जगह नियंत्रकों से खोज रहा है और यही कारण है कि यह एक और खोज रहा है HomeController? मैं इसे केवल नियंत्रक फ़ोल्डर में देखने के लिए कैसे कह सकता हूं?

तथ्य:

  1. क्षेत्रों का उपयोग नहीं कर रहा है। ये दो पूरी तरह से असंबंधित परियोजनाएं हैं। मैं प्रत्येक प्रकाशित परियोजना को प्रत्येक संबंधित फ़ोल्डर में रखता हूं। कुछ भी आकर्षक नहीं।
  2. प्रत्येक प्रोजेक्ट में केवल 1 होमकंट्रोलर होता है।

क्या कोई यह पुष्टि कर सकता है कि यह समस्या है?


268
2017-10-20 21:09


मूल


बहुत अस्पष्ट सवाल। क्या आप क्षेत्रों का उपयोग कर रहे हैं? क्या समस्या स्थानीय रूप से होती है? - Darin Dimitrov
@ डारिन: उस जानकारी को संपादित किया गया। - Only Bolivian Here


जवाब:


यह त्रुटि संदेश अक्सर होता है जब आप क्षेत्रों का उपयोग करते हैं और आपके पास होता है एक ही नियंत्रक क्षेत्र और रूट के अंदर नाम। उदाहरण के लिए आपके पास दो हैं:

  • ~/Controllers/HomeController.cs
  • ~/Areas/Admin/Controllers/HomeController.cs

इस समस्या को हल करने के लिए (जैसा कि त्रुटि संदेश आपको सुझाता है), आप अपने मार्गों की घोषणा करते समय नामस्थान का उपयोग कर सकते हैं। तो मुख्य मार्ग परिभाषा में Global.asax:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);

और आपके में ~/Areas/Admin/AdminAreaRegistration.cs:

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);

यदि आप क्षेत्रों का उपयोग नहीं कर रहे हैं तो ऐसा लगता है कि आपके दोनों एप्लिकेशन एक ही एएसपी.NET एप्लिकेशन के अंदर होस्ट किए जाते हैं और विवाद होते हैं क्योंकि आपके पास अलग-अलग नामस्थानों में परिभाषित समान नियंत्रक होते हैं। यदि आप इस तरह के संघर्ष से बचना चाहते हैं तो आपको उन दोनों को अलग एएसपी.NET अनुप्रयोगों के रूप में होस्ट करने के लिए आईआईएस को कॉन्फ़िगर करना होगा। यदि आपके पास सर्वर तक पहुंच नहीं है तो इसके लिए अपने होस्टिंग प्रदाता से पूछें।


425
2017-10-20 21:17



मैं बिल्कुल इलाकों का उपयोग नहीं कर रहा हूं। ये एक एफ़टीपी रूट फ़ोल्डर के अंदर अलग फ़ोल्डर में रहने वाले दो पूरी तरह से असंबंधित अनुप्रयोग हैं। हो सकता है कि मेरा एप्लिकेशन हर जगह एमवीसी नियंत्रकों की तलाश कर रहा हो और यह अन्य होम कंट्रोलर तक पहुंचने के लिए ऐसा ही हो। मैं इसे कहीं भी देखने के लिए कैसे कह सकता हूं लेकिन यह स्वयं का नियंत्रक फ़ोल्डर है और बाकी की उपेक्षा करता है? - Only Bolivian Here
@ सर्जीओपिया, ऐसा लगता है कि वे आपके अनुप्रयोगों से काफी संबंधित हैं। आपके होस्टिंग प्रदाता ने उन्हें एक ही एएसपी.NET एप्लिकेशन के अंदर रखा है। आपको उन्हें आईआईएस में अलग-अलग उदाहरणों के रूप में विभाजित करने के लिए कहा होगा या आपको बहुत सारी समस्याएं होंगी। - Darin Dimitrov
धन्यवाद यह आसान है और नौकरी करता है। - Roboblob
धन्यवाद। एएसपी एमवीसी 4.0 में आपको नेमस्पेस जैसे नामांकित तर्क को पारित करने की आवश्यकता है: नया [] {"AppName.Areas.Admin.Controllers"} - om471987
+1 - अच्छी तरह से काम करता है। मुझे नहीं पता था कि क्षेत्रों में मार्ग पंजीकरण के लिए एक अलग क्षेत्र था। हर जगह मुझे लगता है कि ऐसा लगता है कि डारिन से एक गुणवत्ता का जवाब है :) - Travis J


यहां एक और परिदृश्य है जहां आप इस त्रुटि का सामना कर सकते हैं। यदि आप अपनी प्रोजेक्ट का नाम बदलते हैं ताकि असेंबली का फ़ाइल नाम बदल जाए, आपके लिए आपके एएसपी.NET असेंबली के दो संस्करण हो सकते हैं, जो इस त्रुटि को पुन: पेश करेंगे।

समाधान आपके पास जाना है bin फ़ोल्डर और पुराने डीएलएस हटा दें। (मैंने "पुनर्निर्माण परियोजना" की कोशिश की, लेकिन उसने इसे हटाया नहीं है, इसलिए जांच करना सुनिश्चित करें bin यह सुनिश्चित करने के लिए कि वे चले गए हैं)


482
2017-09-28 04:22



इस त्रुटि की अन्य भिन्नता तब होती है जब आप रिशेर्पर का उपयोग करते हैं और आप कुछ "ऑटो" रिफैक्टर विकल्पों का उपयोग करते हैं जिनमें नामस्थान नाम बदलना शामिल है। यह मेरे साथ हुआ था। - Sebastian 506563
यह मेरा मामला है, यह मेरे लिए काम करता है। धन्यवाद - Syed Mohamed
यदि आप इसे एज़ूर ऐप सेवा से प्राप्त कर रहे हैं, तो लॉग इन करने और फ़ाइलों को हटाने के लिए https: // <your_app_name_here> .scm.azurewebsites.net / DebugConsole पर जाएं। - Tom Blodget
Thx यह मेरे लिए समस्या थी। मैंने एक मौजूदा प्रोजेक्ट को एक नए फ़ोल्डर में प्रतिलिपि / पेस्ट करके "नया" प्रोजेक्ट बनाया होगा; पुरानी बिल्ड डीएलएस के साथ आया, बिन फ़ोल्डर को हटाने से इसे साफ कर दिया गया - brando
यह मामला भी मेरे लिए होता है। आपका बहुत बहुत धन्यवाद...... - Md. Osman Goni Mojumder


एमवीसी 4 और एमवीसी 5 में यह थोड़ा अलग है, निम्नलिखित का उपयोग करें

/App_Start/RouteConfig.cs

namespace MyNamespace
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces:  new[] {"MyNamespace.Controllers"}
            );
        }
    }
}

और क्षेत्रों में

context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new[] { "MyNamespace.Areas.Admin.Controllers" }
            );

53
2017-10-20 11:00





इसे देखो... http://www.asp.net/mvc/videos/mvc-2/how-do-i/aspnet-mvc-2-areas 

फिर यह तस्वीर (आशा है कि आप मेरे चित्र पसंद करेंगे)

enter image description here


36
2017-07-06 11:13



स्क्रीन शॉट के लिए +1। "हजारों शब्दों के लायक तस्वीर" :) - ppumkin
मुद्दा हल किया ..! :) - Aruna
बहुत अच्छा। मेरे लिए हल - Erico Souza


दूसरों ने जो कहा वह सही है लेकिन उन लोगों के लिए जो अभी भी एक ही समस्या का सामना कर रहे हैं:
मेरे मामले में ऐसा इसलिए हुआ क्योंकि मैंने एक और प्रोजेक्ट की प्रतिलिपि बना ली और इसे किसी अन्य चीज़ के नाम पर बदल दिया परंतु पिछले आउटपुट फाइलों में bin फ़ोल्डर अभी भी वहाँ थे ... और दुर्भाग्य से, मारना Build -> Clean Solution परियोजना और उसके नाम बदलने के बाद Namespaces  हटा नहीं है उन्हें ... तो हटाने उन्होंने मैन्युअल रूप से मेरी समस्या हल की!


28
2017-11-30 05:24



आपके सुझाव ने मुझे बचाया - Abhimanyu
मैं भी, धन्यवाद, साफ dosnt वास्तव में साफ मतलब है, grrrr - katibaer
धन्यवाद @ डीआरटीजे यह बहुत निराशाजनक था! आप डांग साफ प्रक्रिया को काम करने की उम्मीद करते हैं और उम्मीदें विफलता की जड़ है। यह मुझे मेरे बालों को आगे खींचने से बचाया! - Mike
धन्यवाद @ डीआर टीजे! - merrais


चेक बिन फ़ोल्डर अगर कोई अन्य डीएलएल फ़ाइल है जो घर नियंत्रक वर्ग से संघर्ष कर सकती है।


21
2017-07-20 05:56



यह मुझे एक परियोजना की प्रतिलिपि बनाते समय और इसे नामित करते समय ... डीएल नाम की पुरानी परियोजना अभी भी बिन में थी, एक सफाई ने इसे हटाया नहीं था ... मुझे इसे मैन्युअल रूप से हटाना पड़ा! - Paul Zahra
यह मेरे लिए समस्या थी। गलती से जोड़ा गया एक सहयोगी इस मुद्दे को बनाने के लिए एक फ्रंट-एंड प्रोजेक्ट से दूसरे संदर्भ में संदर्भ देता है। उन्होंने संदर्भ हटा दिया, इस प्रकार विजुअल स्टूडियो भी अपनी डिस्क पर डीएलएल फाइलों को हटा रहा है। मैंने गिट से अद्यतन खींच लिया, संदर्भ चले गए, लेकिन डीएलएल फाइलें तब भी एक साफ थीं। बस क्योंकि मेरे वीएस ने अब संदर्भ नहीं देखा था। लेकिन आईआईएस चलाने पर फाइलें देखी गईं और उनका इस्तेमाल किया। मेरी डिस्क से उन्हें हटाने में मदद मिली। - Yeronimo


एक और समाधान कंट्रोलरबिल्डर के साथ एक डिफ़ॉल्ट नेमस्पेस पंजीकृत करना है। चूंकि हमारे पास हमारे मुख्य आवेदन में बहुत से मार्ग थे और हमारे क्षेत्रों में केवल एक ही सामान्य मार्ग (जहां हम पहले ही नामस्थान निर्दिष्ट कर रहे थे), हमने पाया कि यह सबसे आसान समाधान है:

ControllerBuilder.Current
     .DefaultNamespaces.Add("YourApp.Controllers");

14
2018-05-10 21:28



यह मेरे लिए मामला था। यदि आपके पास वास्तव में एक ही नाम के साथ एकाधिक नियंत्रक हैं, तो आपके रूट परिभाषाओं में नामस्थान जोड़े जाने के बाद इसकी आवश्यकता हो सकती है। उदाहरण के लिए, आपके मुखपृष्ठ के लिए जहां नियंत्रक और क्षेत्र को पथ द्वारा स्पष्ट रूप से चुना नहीं जाता है। - Jason Beck
प्रोजेक्ट में मैं काम करता हूं, हमारे पास कस्टम क्लाइंट काम के क्षेत्रों के साथ मुख्य टर्नकी बैकऑफिस है। प्रत्येक में 'सेटिंग्स' नियंत्रक होता है। यह उत्तर प्रत्येक क्षेत्र के लिए सेटिंग नियंत्रक के लिए एक मार्ग परिभाषित करने का एक शानदार विकल्प है। - Derreck Dean


आपकी परियोजना में bin/ फ़ोल्डर

सुनिश्चित करें कि आपके पास केवल आपका ही है PROJECT_PACKAGENAME.DLL

और हटा दें ANOTHER_PROJECT_PACKAGENAME.DLL 

जो गलती से यहां दिखाई दे सकता है या आप बस अपनी परियोजना का नाम बदल सकते हैं


11
2017-09-20 03:01