J'ai un projet ASP.NET MVC que je construis et que je cherchais dans la documentation lorsque je suis tombé sur la façon dont la classe Controller est implémentée. Je connais assez bien OOP mais j'ai quelques questions sur la raison pour laquelle il est implémenté de cette manière.
J'ai regardé codeproject et quelques débordement de pile questions mais je n'ai pas trouvé exactement la même question que je me posais.
Merci d'avance!
Dans MVC 5, ControllerBase
agit uniquement comme une classe de base pour une utilisation principalement interne et implémente en interne la IController.Execute(RequestContext requestContext)
, et voici la liste des utilisations que j'ai obtenues de Resharper
Controller
implémente ensuite toutes les fonctionnalités pour les filtres, le modèle et la liaison de vue. Par conséquent, pour implémenter votre MyController
, vous devez dériver de Controller
Votre SO référence a déjà expliqué le but de ControllerBase
et Controller
.
La chose semble beaucoup plus intéressante dans MVC 6 (appelé par la suite ASP.NET MVC Core) lorsque l'équipe ASP.NET a convergé MVC, WebAPI en un seul framework
Veuillez consulter le code source de la classe Controller et ControllerBase dans GitHub pour ASP.NET Core 1.1.1. Dans le <summary>
tag pour chaque classe, ils disent:
Une classe de base pour un contrôleur MVC avec prise en charge de la vue .
Une classe de base pour un contrôleur MVC sans prise en charge de la vue.
Vous pouvez demander quand utiliser ControllerBase. Mon instinct me dit que si j'utilise uniquement ASP.NET MVC pour WebAPI et ne nécessite pas la fonctionnalité View
, vous pouvez dériver votre MyController
directement à partir de ControllerBase
. La plupart du temps, vous pouvez dériver de Controller
même si vous n'utilisez pas View
et renvoyez uniquement une chaîne ou JSON pour WebAPI. Controller.cs
vous permet de renvoyer un View
et de profiter de la liaison automatique.