7
votes

Différenciez les paramètres du GUID et de la chaîne dans MVC 3

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 commentaires

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).


3 Réponses :


11
votes

Tout d'abord, vous devez désambiguer vos méthodes en leur donnant deux noms différents: xxx

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: xxx

enfin, ajoutez un itinéraire en haut de vos itinéraires, comme suit: xxx

Lorsqu'une demande est disponible pour plus de détails, les coordonnées utiliseront votre gestionnaire d'itinéraire personnalisé pour inspecter le jeton . 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.


0 commentaires

8
votes

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();
    }
}


1 commentaires

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.



7
votes

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: xxx

alors vous peut simplement créer votre résultat d'action comme suit: xxx


1 commentaires

A travaillé un régal, assurez-vous simplement d'utiliser le droit à l'aide de instruction - vous voulez probablement à l'aide de system.web.mvc.routing.constraint; et non system.web.http. Routage.Construistions