J'ai créé un itinéraire dans l'application ASP.net MVC qui ressemble à ceci:Actions de routage et contrôleur - données en option
routes.MapRoute(
"ArticleRoute",
"{year}/{month}/{day}/{articleId}/{displayName}",
new { controller = "Article", action = "Details" }
);
Je veux un itinéraire qui sera comme un article de blog.
Exemple: http://www.foobar.com/2010/01/01/123456789/the-name-of-the-article
Dans mon action Détails contrôleur Je veux faire une redirection permanente si l'année, le mois, la date et le nom d'affichage ne sont pas correctes. Je veux savoir la meilleure façon d'écrire la méthode du contrôleur Details().
Le seul champ réellement requis est l'articleId. Si j'ai l'identifiant de l'article, la base de données aura la date et le nom de l'article. Je veux vraiment savoir à quoi devrait ressembler la méthode du contrôleur. Est-ce que je passe toutes les valeurs à la méthode ou utilise RouteData pour les obtenir?
public ActionResult Details(int articleId, string displayName)
{
var article = */SNIP*/;
int articleYear = RouteData.Values["year"];
// etc.
DateTime articleDate = new DateTime(articleYear, articleMonth, articleDay);
string realDisplayName = article.Name.ToSeoString();
if(displayName != realDisplayName || article.Date != articleDate)
// permanent redirect to the actual article
return View();
}
OU
public ActionResult(int year, int month, int day, int articleId, string displayName)
{
var article = /*SNIP*/;
DateTime articleDate = new DateTime(year, month, day);
string realDisplayName = article.Name.ToSeoString();
if(displayName != realDisplayName || article.Date != articleDate)
// permanent redirect to the actual article
return View();
}
Je pense que les deux travaillent sur le plan technique, mais qui est la meilleure façon?
Aussi: s'il y a d'autres failles dans ce que je fais, n'hésitez pas à les signaler.
C'est essentiellement ce que je demande. Est-ce que cela a du sens de jamais utiliser RouteData.Values pour récupérer seulement certaines valeurs ou devrais-je tout simplement y passer. – Dismissile