मेरी परियोजना में एक ही नाम के कई नियंत्रकों के साथ समस्या


96

मैं अपने ASP.NET MVC 3 प्रोजेक्ट के साथ निम्न त्रुटि में चल रहा हूं:

कई प्रकार पाए गए जो 'होम' नाम के कंट्रोलर से मेल खाते हैं। ऐसा तब हो सकता है जब यह अनुरोध करने वाले मार्ग ('होम / {एक्शन} / {आईडी}') अनुरोध से मेल खाने वाले नियंत्रक की खोज करने के लिए नाम स्थान निर्दिष्ट नहीं करता है। यदि यह स्थिति है, तो 'MapRoute' पद्धति का एक अधिभार जिसे 'नेमस्पेस' पैरामीटर लेता है, कॉल करके इस रूट को पंजीकृत करें।

'होम' के लिए अनुरोध में निम्नलिखित मिलान नियंत्रक पाए गए हैं: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers-omeController

मेरा डिफ़ॉल्ट नियंत्रक फ़ोल्डर में एक HomeController है, जिसमें MyCompany.MyProject.WebMvc.Controllers.HomeController का एक वर्ग नाम है।

मेरा RegisterRoutes विधि, मेरे Global.asax में, जैसा दिखता है:

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

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

फिर मेरे पास एक क्षेत्र है, जिसे कंपनी कहा जाता है, इस क्षेत्र के लिए डिफ़ॉल्ट नियंत्रक फ़ोल्डर में एक होमकंट्रोलर के साथ, MyCompany.MyProject.WebMvc.Areas.Company.Controllers.omeController का एक वर्ग नाम है।

CompanyAreaRegistration फ़ाइल में RegisterArea विधि इस प्रकार है:

   public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Company_default",
            "Company/{controller}/{action}/{id}",
            new { area = "Company", action = "Index", id = UrlParameter.Optional }
        );
    }

इस पोस्ट की शुरुआत में मैंने जो त्रुटि उजागर की, वह सभी को आगे बढ़ा रही है। मैं विभिन्न अन्य पदों के समाधान के साथ-साथ NO LUCK के साथ मिलकर काम करने की कोशिश कर रहा हूं ।

क्या डिफ़ॉल्ट कंट्रोलर फ़ोल्डर में होमकंट्रोलर और फिर EACH क्षेत्र में एक होना संभव है? यदि ऐसा है, तो क्या मुझे यह काम करने के लिए अपनी कॉन्फ़िगरेशन फ़ाइल में परिवर्तन (मुझे लगता है) करने की आवश्यकता है?

कोई भी सहायताकाफी प्रशंसनीय होगी!


इस stackoverflow.com/a/12633541/2089963 को देखें । यह मेरे लिए काम करता है
सैयद मोहम्मद

मेरे साथ ऐसा तब होता है जब मैंने प्रोजेक्ट / असेंबली का नाम बदला, मैंने सिर्फ बिन फोल्डर को डिलीट किया और प्रोजेक्ट को फिर से शुरू किया और यह ठीक काम किया।
कोर

जवाबों:


167

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

routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
     new string[] { "MyCompany.MyProject.WebMvc.Controllers"}
);

यह http: // सर्वर / आपके होमकंट्रोलर की इंडेक्स एक्शन पर जाएगा, जो मुझे लगता है, कि आप क्या चाहते हैं। http: // सर्वर / कंपनी / घर कंपनी क्षेत्र के होमकंट्रोलर की सूचकांक कार्रवाई में जाएंगे, जैसा कि क्षेत्र पंजीकरण में परिभाषित किया गया है।


1
मैंने इसका परीक्षण नहीं किया है, लेकिन namespacesपैरामीटर एक स्ट्रिंग सरणी है, इसलिए आपको सरणी में जोड़कर किसी भी संख्या को पारित करने में सक्षम होना चाहिए:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
डेविड रुतका

2
उस नेमस्पेस पैटर्न ने मेरे लिए काम नहीं किया। MyProject.Controllersहालाँकि किया था।
मफिन मैन

मैंने यह एक कोशिश की। लेकिन इस MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeControllerवर्ग में सूचकांक निष्पादित हो रहा है। लेकिन दृश्य पुराना है।
kbvishnu

वर्थ कुछ भी नहीं है कि यहां 4 वाँ पैरामीटर प्रकार के अनुमान और परिवर्तनशील अर्थ के कारण थोड़ा भ्रमित हो सकता है। 4 वाँ पैरामीटर नेमस्पेस द्वारा विवश करने के लिए एक स्ट्रिंग सरणी हो सकती है, IRouteConstraints या स्ट्रिंग्स को जोड़ने के लिए एक वस्तु जो बाधाओं के रूप में व्याख्या की जा सकती है, या आपके पास 5 पैरामीटर हो सकते हैं और दोनों को शामिल कर सकते हैं। aspnetwebstack.codeplex.com/SourceControl/changeset/view/…
क्रिस मोसचिनी

एक मार्ग को ध्यान में रखते हुए, अन्य नामस्थानों के लिए डिफ़ॉल्ट रूप से अपना रास्ता खोजेगा - यदि आप किसी नाम स्थान या नामस्थान के सेट को लॉक करना चाहते हैं, तो आपको इस फ़ॉलबैक को अक्षम करना होगा: bubblogging.wordpress.com/2012/06/09/mvc- रूटिंग-नेमस्पेस (पृष्ठ के नीचे)
क्रिस मोशिनि

30

यह asp.net mvc4 दृष्टिकोण है:

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

2
धन्यवाद, इसने मेरे लिए इसे हल कर दिया, हालांकि मैं अपने जीवन के लिए यह पता नहीं लगा सका कि मेरा आवेदन क्यों सोचता है कि पहले स्थान पर दो घरेलू नियंत्रक हैं। मैंने नाम स्थान की खोज और प्रतिस्थापन किया, जो प्रतीत होता है कि समस्या का कारण है, लेकिन संपूर्ण समाधान की खोज में दुष्ट नाम स्थान का कोई उदाहरण दिखाई नहीं देता है।
यन् दुरन

12
खैर, मुझे अपनी समस्या का कारण मिल गया। उम्मीद है कि यह किसी और को खोजने में मदद कर सकता है, जैसा कि मैं आज था। क्योंकि मैंने एप्लिकेशन का नाम (साथ ही नेमस्पेस) बदल दिया था, बिन फ़ोल्डर में अभी भी एक डीएलएल बचा था जो एक साफ द्वारा हटा नहीं गया था। कवर के नीचे कुछ MEF जादू चल रहा होगा। जैसे ही मैंने पुराने डीएलएल को खोजा और हटाया, समस्या दूर हो गई। कोई आश्चर्य नहीं कि एक पाठ खोज इसे नहीं मिली!
यान दुरान

@ यनदुरान, एक समान समस्या में भाग गया और आपकी नियत में मदद मिली। धन्यवाद।
क्लॉस नजी

12

मैं नामस्थान नाम दिया था, इसलिए, मैं केवल हटाना डी फ़ोल्डरों बिन और obj और पुनर्निर्माण फिर से, काम करते हैं।



2

इसे इस्तेमाल करो

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

1

केवल परियोजना के नाम का उपयोग करें:

Public Class RouteConfig
    Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
        routes.MapRoute( _
            name:="Default", _
            url:="{controller}/{action}/{id}", _
            defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
           , namespaces:={"MvcAreas"})  
    End Sub

1

यदि आप RazorGenerator का उपयोग कर रहे हैं, तो बस namespacesपैरामीटर को सूचित करना पर्याप्त नहीं हो सकता है।

नीचे दिए गए कथन को जोड़ने के लिए मुझे हल करना पड़ा Global.asax.cs:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        ControllerBuilder.Current.DefaultNamespaces.Add("MyProject.Controllers"); // This one
    }

0

जैसा कि क्रिस मोसचीनी ने उल्लेख किया है कि यदि आपके पास दो अलग-अलग नामस्थान वाले नियंत्रक नाम के साथ दो क्षेत्र हैं और डिफ़ॉल्ट रूप से कोई भी क्षेत्र मार्ग 500 सर्वर त्रुटि नहीं देगा, तो नामस्थान पैरामीटर पर्याप्त नहीं होगा।

routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
     new string[] { "MyCompany.MyProject.WebMvc.Controllers"}
);

डिफ़ॉल्ट मार्ग हैंडलर को ओवरराइड करने और इस लाइन को जोड़ने के लिए "सर्वश्रेष्ठ":

RequestContext.RouteData.DataTokens["UseNamespaceFallback"] = false;

0

मेरे पास यह समस्या थी जब मैंने किसी अन्य प्रोजेक्ट का संदर्भ जोड़ा था जिसमें समान मार्ग थे और संदर्भ हटाने के बाद समस्या जारी रही।

बिन फ़ोल्डर और पुन: निर्माण से उस जोड़ा संदर्भ की .dll फ़ाइल को हटाने के द्वारा हल किया गया।


0

कई अन्य लोगों की तरह, मुझे VS2017 मेनू से एक नया MVC टेम्पलेट प्रोजेक्ट बनाने के बाद यह समस्या हुई, परियोजना के निर्माण पर मुझे op की त्रुटि संदेश मिलेगा। मैं तो इस सवाल का जवाब इस्तेमाल किया https://stackoverflow.com/a/15651619/2417292 द्वारा इस सूत्र में पहले तैनात cooloverride mvc4 परियोजनाओं के लिए। यह अभी भी मेरी समस्या को ठीक नहीं करता है इसलिए मैंने अपने होम व्यू फ़ोल्डर और होमकंट्रोलर फ़ाइल का नाम बदलकर दृश्य फ़ोल्डर कंपनी / कंट्रोलर फाइल कंपनीकॉन्ट्रोलर कर दिया है। इसके बाद मेरे लिए काम किया गया, प्रति फिक्स नहीं, बल्कि वर्कअराउंड अगर आपका रूट होम / इंडेक्स पर अटका नहीं है तो मेरा दूसरा मुद्दा यह था कि मैं इस संदर्भ को त्रुटि का कारण नहीं बना पाया और मेरे देव मंच के एज़्योर वेबएप्लिकेशन बनाम ए। एक पूर्ण फ़ाइल सिस्टम और IIS सेटिंग्स के साथ गड़बड़ करने के लिए पूर्ण वीएम।


0

मेरे पास एक ही मुद्दा था और पाया कि पुराने संस्करण ने "बिन" फ़ोल्डर में संकलित फाइलें बनाई थीं।

एक बार जब मैंने इन्हें हटा दिया तो यह त्रुटि गायब हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.