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


Est-il vrai que "ApiController deviendra obsolète dans .NET Core "? J'ai vraiment besoin d'un aperçu professionnel à ce sujet. Depuis que je prévois de l'utiliser dans de nouveaux projets.


30
2017-07-29 21:02


origine


Réponses:


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 permet quelques nouvelles fonctionnalités telles que la validation automatique de l'état du modèle et l'inférence des paramètres de la 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 pas de particulier ApiController classe depuis que MVC et WebAPI ont été fusionnés dans ASP.NET Core. Cependant, le Controller La classe de MVC intègre un ensemble de fonctionnalités dont vous n’auriez probablement pas besoin lors du développement d’une API Web, telle que la liaison de vues et de modèles.

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

Utilisez le ControllerBase classe dans le Microsoft.AspNetCore.Mvc.Core paquet.

Ou 

Crée ton ApiController classe de base La clé ici est d'ajouter le [ActionContext] attribut qui injecte le courant ActionContext instance dans la propriété:

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

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

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


36
2017-07-30 10:06



Dans ASP.NET, le cœur utilise des termes et concepts connus d'ASP.NET MVC et ASP.NET WepAPI. Mais fondamentalement, c'est un nouveau cadre complet. Il y a donc plusieurs concepts ou classes de base que nous pouvons tout simplement oublier.

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

Dans ASP.NET Core, ce n'est plus nécessaire. le Controller la classe de base peut être utilisée pour les actions qui renvoient du code HTML à partir de Razor Views ou JSON (avec des formats de sortie XML et d’autres formats sont également possibles). Vous n'avez même pas besoin de Controller classe de base Il est même possible d'utiliser un "Objet Old C # Plain" comme Contrôleur sans héritage. Ceci est un exemple de démo-contrôleur à décrire, même si 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
2017-07-29 21:39



le [ApiController] L'attribut a été rajouté dans ASP.NET Core version 2.1.

Les caractéristiques associées à l'attribut sont les suivantes:

  • 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 y a aussi la baseclass ControllerBase pour que les contrôleurs héritent de ce qui est approprié pour les api-controllers, car il convient à toutes les fonctionnalités liées à la vue.


6
2018-06-04 06:31



Comme d’autres l’ont mentionné, ASP.NET Core est une nouvelle pile Web complète qui n’est pas compatible avec l’ancienne pile Web ASP.NET MVC. Cela se reflète explicitement dans son nom et sa 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 ce que vous cherchiez peut-être:

Si vous migrez depuis une application ASP.NET MVC ou ASP.NET WebApi précédente, vous pouvez importer le fichier Microsoft.AspNetCore.Mvc.WebApiCompatShim package qui fournit des types de compatibilité qui facilitent les migrations par rapport aux versions précédentes. Parmi eux se trouve le ApiController classe et certains attributs qui ont été supprimés dans la nouvelle pile Web Api.

Cependant, notez 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 cette cale de compatibilité et simplement utiliser les nouveaux éléments.


4
2017-07-30 09:52