web-dev-qa-db-fra.com

ApiController est-il obsolète dans .NET Core?

Est-il vrai que "ApiController deviendra obsolète dans .NET Core"? Demander depuis que je prévois de l'utiliser dans de nouveaux projets.

40
Viji

Mettre à jour ASP.NET Core 2.1

Depuis ASP.NET Core 2.1, un nouvel ensemble de types est disponible pour créer des contrôleurs API Web. Vous pouvez annoter vos contrôleurs avec le [ApiController] attribut qui active quelques nouvelles fonctionnalités telles que la validation automatique de l’état du modèle et l’inférence de paramètre source de liaison. Voir la documentation pour plus d'informations: https://docs.Microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattattute =.


Il n'y a en effet plus de classe ApiController particulière depuis que MVC et WebAPI ont été fusionnés dans ASP.NET Core. Cependant, la classe Controller de MVC apporte un ensemble de fonctionnalités dont vous n’auriez probablement pas besoin lors du développement d’une API Web, telles que les liaisons de vues et de modèles.

Vous avez deux options si vous voulez quelque chose de différent:

Utilisez la classe ControllerBase dans le package Microsoft.AspNetCore.Mvc.Core .

ou

Créez votre classe de base ApiController. La clé ici est d'ajouter le [ActionContext] attribut qui injecte l'instance actuelle ActionContext dans la propriété:

[Controller]
public abstract class ApiController
{
    [ActionContext]
    public ActionContext ActionContext { get; set; }
}

Ajoutez également le [Controller] attribut à la classe de la marquer en tant que contrôleur pour la découverte de contrôleur MVC.

Voir plus de détails dans mon "API Web dans MVC 6" blogpost .

55
Henk Mollema

Le [ApiController] attribut effectivement ajouté dans ASP.NET Core version 2.1.

Les fonctionnalités associées à l'attribut sont:

  • Les erreurs de validation déclenchent automatiquement une réponse HTTP 400.
  • Plus besoin de définir [FromBody], [FromRoute], ... attributs explicitement

Liens vers les documents:

Mettre à jour

Il existe également la classe de base ControllerBase pour les contrôleurs à hériter, qui convient aux contrôleurs api car elle omet toutes les fonctionnalités liées à la vue.

15
Riscie

Dans ASP.NET, le noyau utilise des termes et des concepts connus d’ASP.NET MVC et d’ASP.NET WepAPI. Mais fondamentalement, il s’agit d’un tout nouveau cadre. Par conséquent, il existe plusieurs concepts ou classes de base que nous pouvons simplement oublier.

ASP.NET MVC et ASP.NET WebApi sont deux frameworks coexistants mais différents. Par conséquent, vous devez spécifier un contrôleur en tant que contrôleur WebApi en utilisant la classe de base ApiController.

Dans ASP.NET Core, cela n’est tout simplement plus nécessaire. La classe de base Controller peut être utilisée pour les actions qui renvoient du code HTML à partir de Razor Views ou JSON (les formats de sortie XML et autres sont également possibles). Vous n'avez même pas besoin de la classe de base Controller. Il est même possible d'utiliser un "Objet ancien brut # #" en tant que contrôleur sans héritage. Ceci est un exemple de contrôleur de démonstration à décrire, même si ApiController n’est pas présent, l’approche structurelle pour la fourniture de données au client est similaire.

public class DemoController : Controller
{       
     public async Task<IActionResult> Action()
     {
         var model = await _someService.GetPreciousData();
         return Ok(model);
     }
 }
10
Ralf Bönning

Comme d'autres l'ont mentionné, ASP.NET Core est une nouvelle pile Web incompatible avec l'ancienne pile Web ASP.NET MVC. Ceci est explicitement reflété dans son nom et son contrôle de version!

ASP.NET Core et ASP.NET Core MVC ont la version 1.0.0 pour rendre cette incompatibilité très claire.

ASP.NET Core a fusionné MVC et WebApi en un seul Api appelé.

Et voici la chose que vous avez peut-être recherchée:

Si vous migrez depuis une application ASP.NET MVC ou ASP.NET WebApi antérieure, vous souhaiterez peut-être importer le fichier Microsoft.AspNetCore.Mvc.WebApiCompatShim package qui fournit certains types de compatibilité facilitant les migrations à partir des versions précédentes. Parmi eux se trouve la classe ApiController et certains attributs qui ont été supprimés dans la nouvelle API webstack.

Toutefois, veuillez noter que ceci n’est là que pour vous aider à migrer des applications existantes. Lorsque vous créez une nouvelle application, vous ne devez pas utiliser ce shim de compatibilité, mais simplement utiliser les nouveaux éléments.

4
Tseng