Comment supprimer "Détails" dans le routage d'URL MVC tout en laissant les autres actions intactes?

StackOverflow https://stackoverflow.com/questions/1001261

  •  05-07-2019
  •  | 
  •  

Question

Je souhaite configurer une route pour un contrôleur qui effectue les opérations CRUD normales, mais souhaite que l'action Détails ne montre pas "Détails" dans l'URL. Stackoverflow semble avoir ce type de routage configuré:

http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask

En utilisant cette analogie, mes itinéraires ressemblent actuellement à:

http://stackoverflow.com/questions/Details/999999/

En ajoutant l'itinéraire suivant, j'ai pu obtenir Détails supprimé:

routes.MapRoute("Q1", "questions/{id}", 
    new { controller = "Questions", action = "Details" });

Cependant, extraire d'autres actions sur le contrôleur (par exemple, / questions / new pour cet exemple) se plaint du fait que l'identifiant ne peut pas être analysé.

Existe-t-il un moyen de configurer les itinéraires de manière à ne pas avoir à saisir manuellement toutes les autres actions (MapRoute "items / create", "items / delete", etc.) manuellement dans le Global. asax.cs? Je voudrais essentiellement avoir un deuxième itinéraire comme:

routes.MapRoute("Q2", "questions/{action}", 
    new { controller = "Questions", action = "Index" });

... et demandez au moteur de routage d'utiliser la route Q1 si {id} correspond à un entier et {action} s'il s'agit d'une chaîne. Est-ce possible?

Était-ce utile?

La solution

Si vous mettez une contrainte de route sur la première afin que le champ id ne puisse être qu'un entier, je pense que toute autre action tombera par défaut.

routes.MapRoute("Q1", 
   "questions/{id}", 
   new {controller = "Questions", action = "Details"},
   new { id=@"\d+" });

Tout le reste devrait être traité par la route par défaut. Donc, "questions / 3553". frapperait celui-ci mais "questions / demander" ne correspond pas. Vous voudrez probablement placer la route la plus spécifique en premier dans votre fichier Global.asax.cs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top