Utilisation des localisateurs de méthode hors de la case dans ASP.NET MVC (3 ou 4DP), est-il un moyen de différencier le cadre MVC entre une chaîne et un guid sans avoir à analyser le paramètre dans l'action du contrôleur ?
Les exemples d'utilisation seraient pour l'URL P>
http: // [Domaine] / Client / Détails / F325A917-04F4-4562-B104-AF193C41FA78 P> blockquote>
exécuter la méthode p>
public ActionResult Details(Guid guid) { var model = Context.GetData(guid); return View(model); } public ActionResult Details(string id) { var model = Context.GetData(id); return View(model); }
3 Réponses :
Tout d'abord, vous devez désambiguer vos méthodes en leur donnant deux noms différents: Ensuite, vous avez besoin d'un gestionnaire de route personnalisé pour inspecter la demande et modifier le nom de la méthode en conséquence: p> enfin, ajoutez un itinéraire code> en haut de vos itinéraires, comme suit: p> Lorsqu'une demande est disponible pour plus de détails, les coordonnées code> code> utiliseront votre gestionnaire d'itinéraire personnalisé pour inspecter le jeton code> code>. Le gestionnaire d'itinéraire ajoute au nom d'action basé sur la forme du jeton ID, de sorte que la demande soit dirigée vers l'action appropriée. P> p>
Mon opinion est que l'utilisation du sélecteur de méthode d'action est plus utilisable et moins de codage.
public class HomeController : Controller { [GuidMethodSelector] public ActionResult Index(Guid id) { return View(); } public ActionResult Index(string id) { return View(); } }
Vous pouvez utiliser la classe IVRUILLIT GUIDECONSTAINT plutôt que nécessaire pour ajouter du code personnalisé. J'apprécie que cela n'aurait peut-être pas été le cas au moment de la rédaction.
Si vous enregistrez toujours des itinéraires de cette façon, la classe GuidroutEconstraintArtion () a été ajoutée dans une version plus récente de MVC et doit être utilisée à la place d'une implémentation personnalisée: alors vous peut simplement créer votre résultat d'action comme suit: p>
A travaillé un régal, assurez-vous simplement d'utiliser le droit à l'aide de code> instruction - vous voulez probablement
à l'aide de system.web.mvc.routing.constraint; code> et non system.web.http. Routage.Construistions
Vous avez raison, le localisateur de la méthode d'action est inconscient de la contrainte de route. Si vous supprimez la méthode d'action String, la méthode d'action GUID est-elle choisie?
MVC ne prend pas en charge la surcharge de la méthode basée uniquement sur la signature - la solution la plus facile pour vous consisterait probablement à avoir deux méthodes d'action nommées de manière unique, une pour plus de détails par GUID (détails) et une autre pour obtenir des détails par nom (recherche ou information peut-être peut-être? ).
@bzlm - Correct, la suppression de l'action de chaîne sélectionnera le GUID (en supposant qu'il passe la contrainte ou peut être analysé dans un GUID).