Saltar al contenido

¿ApiController está obsoleto en .NET Core?

Solución:

Actualizar ASP.NET Core 2.1

Desde ASP.NET Core 2.1, hay disponible un nuevo conjunto de tipos para crear controladores de API web. Puede anotar sus controladores con el [ApiController] atributo que habilita algunas características nuevas, como la validación automática del estado del modelo y la inferencia de parámetros de origen de enlace. Consulte los documentos para obtener más información: https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute.


De hecho, no hay ninguna ApiController class ya que MVC y WebAPI se han fusionado en ASP.NET Core. sin embargo, el Controller La clase de MVC trae un montón de características que probablemente no necesitará cuando desarrolle solo una API web, como vistas y enlace de modelo.

Tienes dos opciones si quieres algo diferente:

Utilizar el ControllerBase class en el paquete Microsoft.AspNetCore.Mvc.Core.

O

Crea tu ApiController clase base. La clave aquí es agregar el [ActionContext] atributo que inyecta la corriente ActionContext instancia en la propiedad:

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

Además, agregue el [Controller] atributo a la clase para marcarlo como un controlador para el descubrimiento del controlador MVC.

Vea más detalles en mi publicación de blog “API web en MVC 6”.

El [ApiController] El atributo realmente se volvió a agregar en ASP.NET Core versión 2.1.

Las características junto con el atributo son:

  • Los errores de validación activan automáticamente una respuesta HTTP 400.
  • No más necesidad de definir [FromBody], [FromRoute], … atributos explícitamente

Enlaces a los documentos:

  • 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

Actualizar

También existe la clase base ControllerBase para que los controladores hereden de lo que es adecuado para api-controllers porque omite todas las funciones relacionadas con la vista.

  • https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.controllerbase?view=aspnetcore-2.1

En ASP.NET, el núcleo utiliza términos y conceptos conocidos de ASP.NET MVC y ASP.NET WepAPI. Pero básicamente es un marco completamente nuevo. Por tanto, existen varios conceptos o clases base que simplemente podemos olvidar.

ASP.NET MVC y ASP.NET WebApi son dos marcos coexistentes pero diferentes y, por lo tanto, se debe establecer un destino para especificar un controlador como controlador WebApi mediante el uso de ApiController como clase base.

En ASP.NET Core, esto simplemente ya no es necesario. El Controller La clase base se puede usar para acciones que devuelven HTML desde Razor Views o JSON (con formateadores de salida, XML y otros formatos también son posibles). Ni siquiera necesitas el Controller clase base. Incluso es posible utilizar un “Objeto C # antiguo simple” como controlador sin herencia. Este es un ejemplo de un Demo-Controller para describir, que aunque el ApiController no está allí, el enfoque estructural para entregar datos al cliente es similar.

public class DemoController : Controller
{       
     public async Task<IActionResult> Action()
     {
         var model = await _someService.GetPreciousData();
         return Ok(model);
     }
 }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *