Magazine High tech

[ASP.NET MVC] Nouveautés MVC 3 Part 6 - Modifications dans les types d'Action Result

Publié le 17 février 2011 par Nicolasesprit

Comme mentionné dans l'introduction, chaque Action d'un contrôleur doit renvoyer un objet de type ActionResult. Au fur et à mesure de l'évolution du Framework, de nouveaux ActionResult sont ajoutés, souvent pour simplifier l'écriture du code. Dans la version 3 de MVC, deux nouveaux types, HttpNotFoundResult et HttpStatusCodeResult ont fait leur apparition. De plus, un des anciens types d'ActionResult, RedirectResult, a été étendu.

Ce billet fait suite à la série sur les nouveautés d'ASP.NET MVC 3 écrit conjointement avec Philippe Viallate. Vous pouvez consulter les précédents billets :

  • [ASP.NET MVC] Nouveautés MVC 3 Part 1 - Améliorations dans Visual Studio 2010
  • [ASP.NET MVC] Nouveautés MVC 3 Part 2 - Améliorations pour la Validation
  • [ASP.NET MVC] Nouveautés MVC 3 Part 3 - Global Action FIlters
  • [ASP.NET MVC] Nouveautés MVC 3 Part 4 - Meilleur support de l'injection de dépendances
  • [ASP.NET MVC] Nouveautés MVC 3 Part 5 - Meilleur gestion de la génération et du rendu HTML

HttpNotFoundResult

Ce nouveau type à pour but de simplifier la gestion d'une page n'existant pas, ou un Id non valide. Imaginons que notre application MVC possède une Action View sur le contrôleur UserController, permettant de voir les détails d'un utilisateur. Si l'on veut, lorsqu'un utilisateur entre un Id qui n'est pas valide, le rediriger vers une page avec un status code de 404, on peut désormais faire :

public ActionResult View(int id) {
if (!UserRepository.Exists(id)) {
return new HttpNotFoundResult("Cet utilisateur n'existe pas");
}
return View(GetUserInformation(id));
}
A noter, une méthode raccourcie, HttpNotFound(), à aussi été ajoutée.

HttpStatusCodeResult

HttpStatusCodeResult permet de gérer l'envoi, à l'utilisateur, du status code de notre choix. La gestion d'un status code spécifique est à réserver à des cas d'optimisation pour les moteurs de recherche, ou l'on va vouloir utiliser des statuts bien spécifique pour indiquer, par exemple, que la ressource n'est définitivement plus disponible.

On pourrait, par exemple, utiliser cet ActionResult pour indiquer, en fonction du contexte fonctionnel, qu'une ressource n'est plus disponible (statut 410), que l'accès à la page est interdit (code 430), ou tout autre code. Par exemple, supposons que l'on ait une action sur une page donnée permettant à l'utilisateur de récupérer son mot de passe, mais que cette action ne soit accessible que pendant un temps donné après que l'utilisateur ait demandé un nouveau mot de passe, on pourrait désormais l'implémenter ainsi :

public ActionResult GenerateNewPassword(int id) {
if (!UserRepository.Exists(id)) {
return new HttpNotFoundResult("Cet utilisateur n'existe pas");
}
var user = UserRepository.LoadById(id);
if (user.DateNewPassWordRequested < DateTime.Now.AddHours(-2))
return
new HttpStatusCodeResult(410);
return View(GetUserInformation(id));
}
 

Redirections permanents avec RedirectResult

La classe RedirectResult possède désormais un nouveau paramètre dans son constructeur. Ce paramètre booléen permet de spécifier une redirection permanente (en termes de code de retour, on passe de 302 à 301). Pour l'utiliser directement, il nous faut faire :

public ActionResult Index(){    return new RedirectResult("http://www.developpez.com", true);}

Ceci dit, le cas général ne sera pas d'appeler directement RedirectResult, mais plutôt d'utiliser une des méthodes de redirection de la classe Controller, laquelle expose :

Retour à La Une de Logo Paperblog

A propos de l’auteur


Nicolasesprit 16 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog