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.
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 .
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);
}
}
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:
- https://docs.microsoft.com/en-us/aspnet/core/aspnetcore-2.1?view=aspnetcore-2.1#apicontroller-actionresult
- https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute
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é.
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.