ApiController est il obsolète in.NET noyau

Est-il vrai que "ApiController sera obsolète dans. NET Core"? J'ai vraiment besoin de perspicacité professionnelle à ce sujet. Car je prévois de l'utiliser dans de nouveaux projets.

31
demandé sur Henk Mollema 2016-07-30 00:02:19

4 réponses

Mise à jour ASP.NET noyau 2.1

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


Il n'y a en effet plus de classe ApiController particulière puisque MVC et WebAPI ont été fusionnés dans ASP.NET noyau. Cependant, la classe Controller de MVC apporte un tas de fonctionnalités dont vous n'aurez probablement pas besoin lors du développement d'une API Web, comme une liaison de vues et de modèle.

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

Utilisation la classe ControllerBase dans le Microsoft.AspNetCore.Mvc.Noyau paquet.

Ou

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

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

Ajoutez également l'attribut [Controller] à la classe pour la marquer comme contrôleur pour la découverte du contrôleur MVC.

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

38
répondu Henk Mollema 2018-06-14 06:41:15

Dans ASP.NET core utilise des Termes et des concepts connus de ASP.NET MVC et ASP.NET WepAPI. Mais fondamentalement, il est un nouveau cadre complet. 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 coexistant mais différents et par conséquent une destination doit être faite pour spécifier un contrôleur en tant que contrôleur WebApi en utilisant ApiController comme classe de base.

Dans ASP.NET Core ce N'est tout simplement plus nécessaire. Le Controller La classe de base peut être utilisée pour les actions qui renvoient HTML à partir de Razor Views ou JSON (avec les formatteurs de sortie XML et d'autres formats 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 C# ancien" comme contrôleur sans héritage. Ceci est un exemple D'un contrôleur de démonstration à décrire, que même si L'ApiController n'est pas là, l'approche structurelle pour fournir des données au client est similaire.

public class DemoController : Controller
{       
     public async Task<IActionResult> Action()
     {
         var model = await _someService.GetPreciousData();
         return Ok(model);
     }
 }
10
répondu Ralf Bönning 2016-07-29 21:47:51

L'attribut [ApiController] a été ajouté ASP.NET version de base 2.1.

Caractéristiques couplées avec 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 le docs:

Mise à Jour

Il y a aussi la baseclass ControllerBase pour les contrôleurs à hériter de laquelle est adapté pour api-controllers car il omet toutes les vues liées fonctionnalité.

7
répondu Riscie 2018-06-04 08:26:10

Comme d'autres l'ont mentionné, ASP.NET Core est un nouveau webstack complet qui n'est pas compatible avec l'ancien ASP.NET MVC webstack. Ceci est explicitement reflété dans son nom et son versioning!

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

ASP.NET Core a fusionné le MVC et WebApi en une seule Api qui vient d'être appelée.

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

Si vous migrez depuis un précédent ASP.NET MVC ou ASP.NET application WebApi, vous pouvez importer le paquet Microsoft.AspNetCore.Mvc.WebApiCompatShim qui fournit des types de compatibilité qui facilitent 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.

Cependant, veuillez noter que ceci n'est là que pour vous aider à migrer des applications existantes. Lorsque vous créez une nouvelle application, vous ne devriez pas utiliser cette cale de compatibilité et utilisez simplement les nouvelles choses.

4
répondu Tseng 2016-07-30 09:52:08