2017-06-09 6 views
0

Ich habe eine MVC 4 (im Moment sowieso) Seite, die ich einer Reihe von Kunden anbieten möchte. Ich dachte, ich hätte eine clevere Idee und würde Custom Controller erstellen und dann auswählen, welche basierend auf einem Parameter oder etwas zu verwenden ist.MVC Routing/dynamische Controller

Jeder Kunde wird seine eigene Installation haben, daher sollte der zu verwendende Controller zur Kompilierzeit ausgewählt werden und nicht im Idealfall die Zeit laufen.

Also war die Idee, eine Steuerung pro Kunde z. Customer1Controller, Customer2Controller usw. und dann so zuordnen, dass alle Kunden http://myserver/Customer verwenden würden.

Ich habe versucht, alle Customer/{action} zu Customer1/{action} zu mappen, aber ich konnte sowieso nicht finden, alle Aktionen in einer Anweisung abzubilden und einen für jede Aktion zu haben, scheint ein bisschen hässlich.

Meine erste Idee war es zu versuchen, Abhängigkeit Injektion zu verwenden, aber wie die konkreten Klassen für Controller verwendet werden, ist das offenbar keine Option. Es hat auch einige andere Mängel.

Die eigentliche Frage ist; Gibt es überhaupt einen "Fang" für Aktionen? Etwas wie folgt aus:

 routes.MapRoute(
      name: "Import", 
      url: "Customer/*/{id}", 
      defaults: new { controller = "Customer1", action = *, id = UrlParameter.Optional } 
     ); 

Thanks./H

Antwort

2

Die eigentliche Frage ist; Gibt es überhaupt einen "Fang" für Aktionen?

Ja. Die Standardroute hat ein gutes Beispiel dafür.

routes.MapRoute(
     name: "Import", 
     url: "Customer/{action}/{id}", 
     defaults: new { controller = "Customer1", id = UrlParameter.Optional } 
    ); 

Dies baut die Route Wert mit dem Aktionsnamen aus der URL-Wörterbuch so kann es jede Aktion auf dem „Customer1“ Controller sein.

Das sagte, Ihre Frage ist unklar. Controller sind dynamisch. Wenn Sie nicht bei jedem Kundencontroller drastisch unterschiedliche Aktionen ausführen, gibt es keinen Grund, einen Controller pro Kunde zu erstellen.

Oder, wenn Sie dem Kunden erlauben, seine eigenen URLs zu erstellen, können Sie dies tun, indem Sie eine custom RouteBase subclass verwenden.

Im Endeffekt gibt es viele Möglichkeiten, URLs anzupassen, aber sie beinhalten keine "dynamischen Controller". Sie nutzen das Routing, um Anfragen dynamisch an bestimmte Controller-Aktionen zu übergeben.

+0

Vermasselt irgendwo, wie ich diese Kombination getestet und es immer um die Index.default-Aktion geroutet. Aber es funktioniert jetzt so Vielen Dank. Ich habe einen Abschnitt der Website, die an den Kunden angepasst ist. Daher die Idee, verschiedene Controller für diesen Teil zu verwenden (wie ich DI verwende, um die Klassen für die Geschäftslogik auszuwählen), aber war nicht möglich oder eine gute Idee darüber nachzudenken. Einige Aktionen werden anders sein und ich möchte vermeiden, ein Vielfaches zu haben von if Aussagen für die anderen .. – VikingIT