web-dev-qa-db-fra.com

Pourquoi dériver de ControllerBase vs Controller pour ASP.NET Core Web API?

Je suis ce didacticiel pour créer une API Web ASP.NET Core et dans la section sur l'ajout d'un contrôleur, le didacticiel donne du code pour remplacer le code de modèle pour un contrôleur. L'une des choses qui a vraiment attiré mon attention est que dans le code du modèle, j'obtiens:

TodoController : Controller

Ensuite, dans le code du tutoriel que je suis censé utiliser à la place de cela, je trouve:

[Route("api/[controller]")]
[ApiController]
TodoController : ControllerBase

Je suis très intéressé de savoir pourquoi il est nécessaire de dériver de ControllerBase au lieu de Controller pour un contrôleur d'API Web. Pourquoi est-ce fait?

25
ProfK

pourquoi il est nécessaire de dériver de ControllerBase au lieu de Controller pour un contrôleur d'API Web.

Ce n'est pas strictement nécessaire, mais plus précisément. La classe Controller dérive de ControllerBase et ajoute certains membres nécessaires pour prendre en charge les vues.

Fondamentalement:

public class Controller : ControllerBase
{
    public dynamic ViewBag { get; }
    public virtual ViewResult View(object model) { }
    // more
}

Lorsque vous écrivez une API, ControllerBase correspond mieux à vos besoins, mais les deux fonctionnent.

30
Henk Holterman