je le cas suivant où je veux accepter les déroutes suivantesasp.net mvc - Route pour chaîne ou int (ie/type/23 ou/type/chapeaux)
'/type/view/23' or '/type/view/hats'
où 23 est l'ID pour les chapeaux.
Le contrôleur ressemble à ceci:
public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(int id)
{
...
}
}
Maintenant, s'ils passent en 23 aucun problème. S'ils passent en chapeaux, j'ai du travail à faire. Maintenant, je me demandais dans ce cas si je traduisais chapeaux à 23 en utilisant un ActionFilter qui cherche à voir si la valeur transmise comme l'ID est un int (si c'est le cas vérifier qu'il existe dans la base de données) ou si c'est une chaîne la base de données pour ce que l'ID de la chaîne qui a été transmis est. Dans les deux cas, si une correspondance n'est pas trouvée, je voudrais rediriger l'utilisateur vers une action différente.
Premièrement, l'approche que j'ai nommée correcte, deuxièmement est-il possible de faire une redirection à partir d'un ActionFilter.
Vive Anthony
Penser à trouver un moyen pour le cadre pour faire le travail, pourrais-je avoir deux déroutes comme ce qui suit: this._Routes.MapRoute (« TypeInt » , "type/view/{id}", nouveau {controller = "Type", action = "ViewInt"}, nouveau {page = @ "^ \ d + $"}); this._Routes.MapRoute ("TypeString", "type/view/{id}", nouveau {controller = "Type", action = "ViewString"}); Serait-il utile de le faire? ou pensez-vous juste faire l'essai parse? –
Je ne vois pas ce que vous gagnez en ajoutant de la complication à l'infrastructure de routage, sauf qu'elle fait l'analyse pour vous. Je ne suis pas assez intelligent pour savoir si cela fonctionnerait sans vraiment le tester.Personnellement, j'aurais probablement deux actions différentes View et ViewByName, qui utilisent toutes deux la même méthode privée pour générer les données une fois que le produit correct a été trouvé. Pour moi, ce serait encore plus simple et plus clair. – tvanfosson