Sto tentando di eseguire quello che sembra un'attività semplice, chiamando un controller da un assembly separato nel mio progetto.ASP.Net MVC 4. Il routing di un controller in un assembly separato restituisce l'errore 404
Tuttavia, quando richiedo informazioni da quel controller, ricevo l'errore 404. Ho combattuto con esso per 5-6 ore e sospetto che possa mancare qualcosa di piccolo ed ovvio, ecco perché spero per un consiglio.
Ho trovato su stakoverflow una domanda simile sull'instradamento e l'errore 404, ma come ho implementato un altro progetto prototipo in cui non ho ricevuto tale errore e utilizzo una struttura di codice simile, credo che il problema che descrivono sia diverso dal mio.
Per un quadro generale, l'obiettivo generale di ciò che voglio ottenere è l'implementazione di un'area all'interno di un progetto indipendente come descritto in here. Ho fatto tutto come è spiegato nel link per un piccolo prototipo (e funziona perfettamente) e ora sto cercando di candidarmi per il vero progetto.
Questo è come io includo un assieme e gestire percorsi:
- C'è un progetto principale con una delle aree che rappresentano un progetto figlio nascosto "CommunicationBus"
progetto "CommunicationBus" contiene una classe "CommunicationBusAreaRegistration". La registrazione di un percorso funziona correttamente, posso arrivare qui con il debugger e anche io posso vedere questo percorso quando uso routedebugger (vedi screenshot qui sotto). Ho anche giocato con namespace per questa classe, ho provato ad aggiungere
.Areas.CommunicationBus
alla fine, ma non ho fatto alcuna differenza che potessi notare.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" } ); } } }
Nel Global.asax del progetto principale a registrare percorsi seguente modo:
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" } ); }
Se mi riferisco qui "CommunicationBus.Controllers", non posso pagine non sono più aperte del principale applicazione. Tuttavia, ritengo necessario registrare qui solo il percorso per i controller dell'applicazione principale
Il percorso di uscita per il progetto CommunicationBus è impostato sulla cartella bin del progetto principale. Ogni volta che creo CommunicationBus ottengo una nuova .dll nel progetto principale.
ho aggiunto un semplice controller al progetto CommunicationBus:
namespace CommunicationBus.Controllers { public class TestController : Controller { [HttpGet] public string Index() { return "It works!"; } } }
ho aggiunto un link al progetto principale
@Html.ActionLink("test","Index","Test", new {Area="CommunicationBus"}, null)
che è:
localhost: 63254/CommunicationBus/Test
Io uso routedebugger e non mostra nulla di sospetto:
Io uso ASP.NET MVC 4 per entrambi i progetti.
Apprezzerei qualsiasi idea su cosa posso fare per capire perché sto ottenendo questo errore.