Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

957
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!