févr. 17 2011

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

Category: ASP.NET | ASP.NET MVC | ASP.NET MVC 3Nicolas Esprit @ 14:10

Comme mentionné dans les parties précédentes, 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 :

HttpNotFoundResult

Ce nouveau type a 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(), a 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, où l'on va vouloir utiliser des statuts bien spécifiques 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 permanentes 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 :

Tags: , , ,

Commentaires

1.
pingback topsy.com says:

Pingback from topsy.com

Twitter Trackbacks for
        
        [ASP.NET MVC] Nouveautés MVC 3 Part 6 - Modifications dans les types d'Action Result
        [nicolasesprit.com]
        on Topsy.com

2.
trackback ASP.NET Français Blogs says:

[ASP.NET MVC] Nouveautés MVC 3 Part 9 - Sessionless Controllers, Viewstart, IMetadataAware et ViewBag

ASP.NET MVC 3 apporte d'autres petites améliorations qu'il est important de noter : les

Les commentaires sont clos