Est-il vrai que "ApiController
deviendra obsolète dans .NET Core"? Demander depuis que je prévois de l'utiliser dans de nouveaux projets.
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 .
Le [ApiController]
attribut effectivement ajouté dans ASP.NET Core version 2.1.
Les fonctionnalités associées à l'attribut sont:
[FromBody]
, [FromRoute]
, ... attributs explicitementLiens 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.
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);
}
}
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.