2011-01-28 6 views
1

Je travaille sur un moteur CMS/Webshop avec un frontal MVC 3. Je veux être en mesure de définir des "alias" d'URL pour l'exécution dynamique de contenu/produits, et je veux être en mesure d'acheminer ces URL vers des actions de contrôleur MVC.
Par exemple, je veux être en mesure de définirMVC 3 Routage personnalisé depuis sql

~/Produits/Cartes mères/{fabricant}/{} uniqueName
~/HugeSavings/{} uniqueName
~/Produits/{} uniqueName etc.

pour mapper sur la même action de contrôleur Display (string uniqueName) dans ProductsController. Ces modèles d'URL sont dynamiques, même les règles de leur ordre ou composition sont NON DEFINI au moment du design, le contenu du modèle ou de la règle du modèle peut changer en cours d'exécution sans redémarrer l'application, ils sont stockés dans SQL, mais doivent être mis en cache. Chaque modèle a une cible qui peut être une URL MVC typique comme

Produits/Affichage/{} UniqueName

ou un lien direct comme

`http: // somestuff. com/stuff.aspx? name = {uniqueName}.


Chaque solution que j'ai trouvé utilisé

RegisteredRoutes.Clear(); 
RebuildRoutes(); 

qui est horrible, à cause de cela pour l'ajout d'un nouveau modèle pour un produit (ou catégorie) Je dois interroger la base de données des milliers de produits et leurs modèles correspondants. Donc, puis-je modifier les itinéraires sans effacer ou redémarrer l'application? Est-ce que je peux "injecter" une certaine logique au routage SANS avoir à recoder l'ensemble de la chose "Rechercher le contrôleur et l'action et analyser les paramètres".

Répondre

1

Oui, vous pouvez ajouter des itinéraires ultérieurement. Juste ne pas RegisteredRoutes.Clear(); eux d'abord.

+0

Si je veux supprimer les anciens ou modifiés, comment puis-je les identifier? Par motif seulement? Puis-je ajouter un ID aux itinéraires par exemple? (car les motifs peuvent être modifiés, non seulement ajoutés et supprimés, et au moment de l'enregistrement, je ne connais pas nécessairement l'ancien motif, mais je connais l'identifiant du motif enregistré) – TDaver

+0

Vous pouvez identifier les itinéraires par nom. http://msdn.microsoft.com/en-us/library/system.web.routing.routecollection.aspx – jfar

1

Si vous êtes encore intereseted, je viens de répondre à une question très similaire concernant le routage entièrement dynamique dans MVC.

Multilingual URLs with ASP.NET MVC

+0

THanks, mais nous sommes finalement allés un chemin différent, nous avons mis un module de réécriture d'URL AVANT le routage de mvc, donc je peut avoir n'importe quel (et beaucoup) pointeur d'URL à une action spécifique même avec la définition d'un paramètre, ainsi je n'ai plus besoin de définir le routage à l'intérieur de mvc de façon dinamique. Découvrez mes rêveries à http://stackoverflow.com/questions/6202682/is-it-possible-to-get-the-controller-and-the-action-not-their-name-based-on-t – TDaver