web-dev-qa-db-fra.com

ASP.NET MVC: routage d'URL vs chaîne de requête

J'ai une page routée comme /Comments/Search/3 où je recherche et affiche tous les commentaires du fil "3".

J'ajoute une fonction de tri (par date, auteur, etc.). Quelle est la meilleure façon de le gérer? /Comments/Search/3/Sort/Author ou /Comments/Search/3?sort=author?

Comment gérer automatiquement la chaîne de tri sort = author en tant que paramètre dans MVC?

Merci

42
pistacchio

Je préfère:/Commentaires/Rechercher/3? Sort = author. La chaîne de requête est un bon endroit pour passer des paramètres de programmation, surtout si le paramètre (comme dans ce cas) n'est pas important à des fins de référencement. Si le paramètre avait une signification sémantique en tant que terme de recherche, la première URL serait meilleure.

Dans une méthode de contrôleur, vous pouvez utiliser quelque chose comme ceci:

public ActionResult Search(int id, string sort)

ASP.NET MVC reliera automatiquement les valeurs de la chaîne de requête aux paramètres de votre méthode.

Utilisez l'itinéraire suivant

routes.MapRoute(
                   "Default",                                              // Route name
                   "{controller}/{action}/{id}",                           // URL with parameters
                   new { controller = "Comments", action = "Search", id = "" }  // Parameter defaults
               );

/ Commentaires/Recherche/3? Sort = l'auteur appellera Recherche (3, "auteur")

/ Commentaires/Recherche/3 appellera Recherche (3, null)

Gardez à l'esprit que l'identifiant est obligatoire, cette URL échouera:/Commentaires/Rechercher

59
Praveen Angyan

ASP.NET MVC gérera cela automatiquement dans le cas de la chaîne de requête. Vous venez d'ajouter un string sort paramètre à votre action.

Ce qui est mieux? Personnellement, j'utilise le chemin pour contrôler le conten affiché et la chaîne de requête pour contrôler le présentation (comment il est affiché, formaté, ...). Donc, pour le tri, j'opterais pour la méthode de la chaîne de requête. Mais je ne pense pas qu'il y ait un inconvénient technique dans l'une ou l'autre approche.

20
Mehrdad Afshari

Votre meilleur pari est d'ajouter une règle de routage pour la gérer. Il y a un article pratique ici:

http://aspalliance.com/1525_ASPNET_MVC_Framework_Part_2_URL_Routing.2

Ensuite, votre URL se lirait/Commentaires/Recherche/3/Trier/Auteur

2
Fenton