2016-08-04 8 views
0

Ich versuche, einige Domain-Namen Logik in meinem vorhandenen MVC5 App zu implementieren. Das Problem, das ich in zu renne, wenn ich versuche, meine benutzerdefinierte Unterklasse von der Route zu verwenden, ist es nicht das Feld Namespaces nicht respektiert und wirft einen Fehler, weil ich 2 verschiedene Benutzer-Controller verfügen.routen und Namespaces in MVC5

Als Kontrolle funktioniert das völlig in Ordnung:

routes.MapRoute("Login", 
       "login/", 
       new { controller = "User", action = "Login" }, 
       new[] { "Quotes.Web.Controllers" }); 

Meine DomainRoute Klasse erbt von der Route und fügt nur ein Domain-Eigenschaft. Hier ist der relevante Konstruktor:

public DomainRoute(string domain, string url, object defaults, string[] namespaces = null) 
     : base(url, new RouteValueDictionary(defaults), new MvcRouteHandler()) 
    { 
     Domain = domain; 
     DataTokens = new RouteValueDictionary {["Namespaces"] = namespaces}; 
    } 

und ich registrieren sie mag:

var loginRoute = new DomainRoute(
    domain, 
    "login/", 
    new { controller = "User", action = "Login" }, 
    new[] { "Quotes.Web.Controllers" }); 
routes.Add("Login", loginRoute); 

DataTokens sieht identisch zwischen der Arbeitsversion und mein gebrochenes Version doch scheint es, die Tatsache zu ignorieren, dass meine DomainRoute einen Namespace hat Eintrag

Es wurden mehrere Typen gefunden, die mit dem Controller namens 'Benutzer' übereinstimmen. Dies kann vorkommen, wenn die Route, die diese Anforderung bedient ('login /') keine Namespaces angibt, um nach einem Controller zu suchen, der der Anforderung entspricht. Wenn dies der Fall ist, registrieren Sie diese Route, indem Sie eine Überladung der MapRoute-Methode aufrufen, die einen Namespaces-Parameter verwendet.

Was bin ich?

Antwort

0

wechselte ich meine DomainRoute Klasse mit der stark verbesserten Version hier: https://gist.github.com/IDisposable/77f11c6f7693f9d181bb

Jetzt ist meine Route Schöpfung nur:

var clientRoutes = new DomainRouteCollection("mydomain", 
              "Quotes.Web.Controllers", 
              routes); 
clientRoutes.MapRoute("Login", "login/", new { controller = "User", action = "Login" }); 

..., die prägnanter ist und was noch wichtiger ist, es funktioniert .

1

Ich denke, this Ihnen helfen, ich hatte das gleiche Problem, löste dies, indem Sie den folgenden Code hinzufügen

var dataTokens = new RouteValueDictionary(); 
     var ns = new string[] {"MyProject.Controllers"}; 
     dataTokens["Namespaces"] = ns; 


     routes.Add("Default", new CultureRoute(
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
            null /*constraints*/, 
            dataTokens 
           ));