2013-07-04 5 views
5

मैं एक सरल कार्य की तरह दिखने की कोशिश कर रहा हूं - मेरे प्रोजेक्ट में एक अलग असेंबली से नियंत्रक को कॉल करना।एएसपी.नेट एमवीसी 4. एक अलग असेंबली रिटर्न में नियंत्रक को रूट करना 404

हालांकि, जब मैं उस नियंत्रक से जानकारी का अनुरोध करता हूं तो मुझे 404 त्रुटि मिल रही है। मैं पिछले 5-6 घंटों से इसके साथ लड़ रहा हूं और मुझे संदेह है कि मुझे कुछ छोटा और स्पष्ट याद आ रहा है, इसलिए मुझे उम्मीद है एक सलाह के लिए।

मुझे रूक ओवरफ्लो पर रूटिंग और त्रुटि 404 के बारे में समान प्रश्न मिल गया, लेकिन जैसा कि मैंने एक और प्रोटोटाइप प्रोजेक्ट लागू किया जहां मुझे ऐसी त्रुटि नहीं मिली और इसी तरह की कोड संरचना का उपयोग किया गया, मुझे विश्वास है कि वे जो समस्या का वर्णन करते हैं वह मेरे से अलग है।

एक सामान्य तस्वीर के लिए - जो मैं प्राप्त करना चाहता हूं उसका समग्र लक्ष्य एक स्वतंत्र परियोजना के अंदर एक क्षेत्र को कार्यान्वित करना है जैसे कि here का वर्णन किया गया है। मैंने सब कुछ किया जैसा कि इसे एक छोटे प्रोटोटाइप के लिंक में समझाया गया है (और यह पूरी तरह से काम करता है) और अब असली परियोजना के लिए आवेदन करने की कोशिश कर रहा है।

इस तरह मैं एक विधानसभा शामिल हैं और जिन मार्गों का प्रबंधन:

  1. क्षेत्रों एक छिपे हुए बच्चे परियोजना "CommunicationBus" का प्रतिनिधित्व करने के साथ एक मुख्य परियोजना है
  2. "CommunicationBus" परियोजना एक वर्ग में शामिल है "CommunicationBusAreaRegistration"। एक मार्ग पंजीकृत करना सही तरीके से काम करता है, मैं यहां डीबगर के साथ मिल सकता हूं और जब मैं रूटरबेगर का उपयोग करता हूं तो मैं यह मार्ग देख सकता हूं (नीचे स्क्रीनशॉट देखें)। मैंने इस कक्षा के लिए नेमस्पेस के साथ भी खेला, अंत में .Areas.CommunicationBus जोड़ने की कोशिश की, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं नोटिस कर सकता था।

    namespace MBVD.MainProject.UI 
    { 
        public class CommunicationBusAreaRegistration : AreaRegistration 
        { 
         public override string AreaName 
         { 
          get 
          { 
           return "CommunicationBus"; 
          } 
         } 
    
         public override void RegisterArea(AreaRegistrationContext context) 
         { 
          context.MapRoute(
           "CommunicationBus_default", 
           "CommunicationBus/{controller}/{action}/{id}", 
           new { action = "Index", id = UrlParameter.Optional }, 
           new string[] { "CommunicationBus.Controllers" } 
          ); 
         } 
        } 
    } 
    
  3. मुख्य परियोजना के Global.asax में मैं मार्गों रजिस्टर निम्नलिखित तरीके:

    public static void RegisterRoutes(RouteCollection routes) 
    { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    
        routes.MapRoute(
         "Default", // Route name 
         "{controller}/{action}/{id}", 
         new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
         new[] { "MBVD.MainProject.UI.Controllers" } 
        ); 
    } 
    

    अगर मैं यहाँ संदर्भ "CommunicationBus.Controllers", मैं मुख्य के पन्नों न खोले जाएं आवेदन। हालांकि, मुझे विश्वास है कि मुझे मुख्य आवेदन

  4. संचार के लिए आउटपुट पथ मुख्य परियोजना के बिन फ़ोल्डर पर सेट किया गया है। हर बार जब मैं संचार बनाता हूं तो मुझे मुख्य परियोजना में एक नया। डीएल मिलता है।

    namespace CommunicationBus.Controllers 
    { 
        public class TestController : Controller 
        { 
         [HttpGet] 
         public string Index() 
         { 
          return "It works!"; 
         } 
        } 
    } 
    
  5. मैं मुख्य परियोजना

    @Html.ActionLink("test","Index","Test", new {Area="CommunicationBus"}, null) 
    

    जो है के लिए एक लिंक कहा::

  6. मैं CommunicationBus परियोजना के लिए एक सरल नियंत्रक जोड़ा

    स्थानीय होस्ट: 63,254/CommunicationBus/टेस्ट

  7. मैं उपयोग करता हूं

routedebugger

मैं दोनों परियोजनाओं के लिए ASP.NET MVC 4 का उपयोग करें: routedebugger और यह कुछ भी संदिग्ध नहीं दिखाती है।

मैं यह समझने के लिए क्या कर सकता हूं कि मैं यह त्रुटि क्यों प्राप्त कर रहा हूं, इस पर किसी भी विचार की सराहना करता हूं।

उत्तर

0

मुझे विश्वास है कि आपको अपने रूटिंग ऑर्डर के कारण यह त्रुटि मिल रही है। चूंकि /CommunicationBus/Test/{controller}/{action}/{id} और /CommunicationBus/{controller}/{action}/{id} दोनों से पहले पंजीकृत मार्ग (/{controller}/{action}/{id}) वांछित मार्ग पर प्राथमिकता ले रहा है, और एमवीसी को डिफ़ॉल्ट नामस्थान (MBVD.MainProject.UI.Controllers) में नियंत्रक नहीं मिला है जिसे CommunicationBus कहा जाता है।

अपने डिफ़ॉल्ट मार्ग से पहले अपने क्षेत्र मार्गों को पंजीकृत करने का प्रयास करें। या, आप बस उस व्यवसाय को एक साथ छोड़ सकते हैं और विशेषता रूटिंग (http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx) का उपयोग कर सकते हैं। यदि आप एट्रिब्यूट रूटिंग के साथ जाते हैं, तो आपको यह सुनिश्चित करना होगा कि आप routes.MapMvcAttributeRoutes(); पर कॉल करने से पहले सभी नेमस्पेस से नियंत्रक लोड कर रहे हैं (यदि आप केवल संदर्भ के रूप में शामिल हैं, तो यह कोई समस्या नहीं है, यदि आप गतिशील रूप से संदर्भ लोड कर रहे हैं तो यह केवल एक मुद्दा बन जाता है) ।

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