Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

961
Vistas
¿Por qué derivar de ControllerBase vs Controller para ASP.NET Core Web API?

Estoy siguiendo este tutorial para crear una API web de ASP.NET Core, y en la sección sobre cómo agregar un controlador, el tutorial brinda un código para reemplazar el código de plantilla para un controlador. Una de las cosas que realmente me llamó la atención fue que en el código de la plantilla obtengo:

 TodoController : Controller

Luego, en el código del tutorial que se supone que debo usar en lugar de eso, encuentro:

 [Route("api/[controller]")] [ApiController] TodoController : ControllerBase

Estoy muy interesado en saber por qué es necesario derivar de ControllerBase en lugar de Controller para un controlador de API web. ¿Por qué se hace esto?

over 4 years ago · Santiago Trujillo
4 Respuestas
Responde la pregunta

0

por qué es necesario derivar de ControllerBase en lugar de Controller para un controlador API web.

No es estrictamente necesario, sólo más al grano. La clase Controller se deriva de ControllerBase y agrega algunos miembros que solo son necesarios para admitir Vistas.

Básicamente:

 public abstract class Controller : ControllerBase { public dynamic ViewBag { get; } public virtual ViewResult View(object model) { } // more View support stuff }

Cuando escribe una API, ControllerBase se adapta mejor a sus requisitos, pero ambos funcionarán.

Según la documentación (énfasis mío):

No cree un controlador de API web derivando de la clase Controller. Controller se deriva de ControllerBase y agrega soporte para vistas, por lo que es para manejar páginas web, no solicitudes de API web. Hay una excepción a esta regla: si planea usar el mismo controlador para las vistas y las API web, derivelo de Controller .

Me parece recordar que no había ControllerBase en las primeras iteraciones de MVC, se insertó más tarde. De ahí la estructura de herencia/nomenclatura ligeramente extraña.

over 4 years ago · Santiago Trujillo Denunciar

0

Otra diferencia importante es que ControllerBase es una clase abstracta, por eso no implementa el método Dispose. Así que tienes que manejarte. ver esta entrada SO

over 4 years ago · Santiago Trujillo Denunciar

0

DESDE https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.1

No cree un controlador de API web derivando de la clase Controller. Controller se deriva de ControllerBase y agrega soporte para vistas, por lo que es para manejar páginas web, no solicitudes de API web.

over 4 years ago · Santiago Trujillo Denunciar

0

Clase abstracta ControllerBase

La clase abstracta del controlador se deriva de la clase abstracta ControllerBase, por lo tanto, es compatible con la creación de vistas, la API no es un consejo para crear vistas.

La clase abstracta ControllerBase tiene miembros [Propiedades, métodos] sin implementación como

 public abstract class ControllerBase{ public HttpResponse Response { get; } public HttpRequest Request { get; } public HttpContext HttpContext { get; } public virtual RedirectToActionResult RedirectToAction(string actionName);}

ControllerBase tiene todas las solicitudes y respuestas entre el lado del cliente y el lado del servidor


Clase abstracta de controlador

La clase abstracta del controlador nos permite crear vistas para mostrar datos en el lado del cliente, se deriva de la clase abstracta ControllerBase.

 public abstract class Controller : ControllerBase{ public dynamic ViewBag { get; } public ViewDataDictionary ViewData { get; set; } public ITempDataDictionary TempData { get; set; } }

https://newbedev.com/why-derive-from-controllerbase-vs-controller-for-asp-net-core-web-api

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda