Routage ASP.NET MVC avec contrôleur par défaut
Pour un scénario, j'ai un ASP.NET application MVC avec des Url qui ressemble à la suivante:
http://example.com/Customer/List
http://example.com/Customer/List/Page/2
http://example.com/Customer/List
http://example.com/Customer/View/8372
http://example.com/Customer/Search/foo/Page/5
Ces Url sont obtenus avec les itinéraires suivants dans Global.asax.cs
routes.MapRoute(
"CustomerSearch"
, "Customer/Search/{query}/Page/{page}"
, new { controller = "Customer", action = "Search" }
);
routes.MapRoute(
"CustomerGeneric"
, "Customer/{action}/{id}/Page/{page}"
, new { controller = "Customer" }
);
//-- Default Route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Customer", action = "Index", id = "" }
);
Tous ces bien passé jusqu'à ce qu'une nouvelle exigence est arrivé et veut déposer mot clé "Client" hors de l'URL, pour faire de l'Url ressemble:
http://example.com/List
http://example.com/List/Page/2
http://example.com/List
http://example.com/View/8372
http://example.com/Search/foo/Page/5
Edit: exemple corrigé les liens, grâce à @haacked.
J'ai essayé d'ajouter de nouveaux MapRoutes
de prendre {action}
et n'ont contrôleur par défaut définie pour le Client. eg/
routes.MapRoute(
"CustomerFoo"
, "{action}"
, new { controller = "Customer", action = "Index" }
);
Cela semble fonctionner, mais maintenant tous les liens générés par Html.ActionLink() sont étranges et non plus de l'URL conviviale.
Alors, est-ce réalisable? Suis-je en approchant dans la bonne direction?
source d'informationauteur Trav L
Vous devez vous connecter pour publier un commentaire.
ne mélangez pas une règle comme:
"{action}/{id}"
avec un"{controller}/{action}/{id}"
... spécialement quand id dans la suite de ce a une valeur par défaut c'est à dire en option.Dans ce cas, vous n'avez rien qui permet de routage pour savoir lequel est le droit de l'utiliser.
Une solution de contournement, si c'est ce que vous avez besoin, serait d'ajouter une limiter (voir cette) à l'action au plus tôt à un ensemble de valeurs c'est à dire la Liste, Vue. Bien sûr qu'avec ces types de règles, vous ne pouvez pas avoir un contrôleur avec le même nom d'une action.
Rappelez-vous aussi que si vous spécifiez une action par défaut & id dans le
"{action}/{id}"
règle, qui sera utilisé lorsque vous appuyez sur la voie de votre site.Pourquoi la première URL de la nouvelle liste ont encore du "Client". Je suppose que c'est une faute de frappe et que vous vouliez dire:
Les itinéraires suivants fonctionnent pour moi:
Comment êtes-vous la production de vos liens. Depuis le Contrôleur n'est plus dans l'URL de votre itinéraire (aka, vous n'avez pas de "{controller}" dans le parcours de l'URL), mais c'est une valeur par défaut, vous devez assurez-vous de spécifier le contrôleur lors de la génération des routes.
Ainsi, au lieu de
ne
Pourquoi? Supposons que vous avez eu les itinéraires suivants.
Quel itinéraire avez-vous dire lorsque vous appelez cela?
Vous pouvez différencier en spécifiant le contrôleur et nous allons choisir celui qui a une valeur par défaut qui correspond à ce qui est indiqué.