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);
}
}