Je viens de tomber sur cette question et, même si elle est assez ancienne maintenant, elle est toujours très pertinente. Ironiquement, le seul commentaire correct dans ce fil a été posté par un débutant avoué dans MVC lorsqu'il a écrit le message. Même les documents ASP.NET ne sont pas entièrement corrects. J'ai un grand projet et j'ai réussi à surcharger les méthodes d'action.
Si l'on comprend le routage, au-delà du modèle de route par défaut simple {controller} / {action} / {id}, il peut être évident que les actions du contrôleur peuvent être mappées en utilisant n'importe quel modèle unique. Quelqu'un ici a parlé du polymorphisme et a dit: "HTTP ne comprend pas le polymorphisme", mais le routage n'a rien à voir avec HTTP. Il s'agit, en termes simples, d'un mécanisme de correspondance de motifs de chaînes.
La meilleure façon de faire cela est d'utiliser les attributs de routage, par exemple:
[RoutePrefix("cars/{country:length(3)}")]
public class CarHireController
{
[Route("{location}/{page:int=1}", Name = "CarHireLocation")]
public ActionResult Index(string country, string location, int page)
{
return Index(country, location, null, page);
}
[Route("{location}/{subLocation}/{page:int=1}", Name = "CarHireSubLocation")]
public ActionResult Index(string country, string location, string subLocation, int page)
{
//The main work goes here
}
}
Ces actions prendront en charge les URL comme /cars/usa/new-york
et/cars/usa/texas/dallas
, qui seront mappées respectivement aux première et deuxième actions d'index.
En examinant cet exemple de contrôleur, il est évident qu'il va au-delà du modèle de route par défaut mentionné ci-dessus. La valeur par défaut fonctionne bien si votre structure d'URL correspond exactement à vos conventions de dénomination de code, mais ce n'est pas toujours le cas. Le code doit être descriptif du domaine, mais les URL doivent souvent aller plus loin car leur contenu doit être basé sur d'autres critères, tels que les exigences SEO.
L'avantage du modèle de routage par défaut est qu'il crée automatiquement des itinéraires uniques. Ceci est appliqué par le compilateur car les URL correspondent à des types et membres de contrôleur uniques. Rouler vos propres modèles d'itinéraire nécessitera une réflexion approfondie pour garantir l'unicité et le bon fonctionnement.
Remarque importante L'inconvénient est que l'utilisation du routage pour générer des URL pour des actions surchargées ne fonctionne pas lorsqu'elle est basée sur un nom d'action, par exemple, lors de l'utilisation d'UrlHelper.Action. Mais cela fonctionne si l'on utilise des routes nommées, par exemple, UrlHelper.RouteUrl. Et l'utilisation de routes nommées est, selon des sources bien respectées, la voie à suivre ( http://haacked.com/archive/2010/11/21/named-routes-to-the-rescue.aspx/ ).
Bonne chance!