¿Qué es la clase Program.cs de ASP.NET Core?

Estrada Web Group
Estrada Web Group
¿Qué es la clase Program.cs de ASP.NET Core?

ASP.NET Core 6 presenta un modelo de alojamiento (hosting) simplificado que reduce el código repetitivo que, de lo contrario, tendrías que escribir para poner en funcionamiento tu aplicación ASP.NET Core. Las clases Program y Startup son las dos clases principales en las que normalmente escribirías tu código para configurar tu aplicación.

En este artículo hablaremos sobre cómo puedes configurar la clase Program de la aplicación en ASP.NET Core 6, con ejemplos de código relevantes donde corresponda.

Introducción a la clase Program

Una aplicación web ASP.NET Core se ejecuta dentro de un host que maneja el inicio de la aplicación, la configuración del servidor web, etc. El host encapsula recursos como el registro, la configuración, la inyección de dependencia (DI) y cualquier implementación de IHostedService. Un host se crea, configura y ejecuta utilizando el código escrito en la clase Program.cs.

Para crear un host en ASP.NET Core 6, debes llamar al método Build().Run() en un generador de host. Un generador de host es una instancia de IHostBuilder. El siguiente fragmento de código ilustra esto:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

La clase WebApplication implementa las siguientes interfaces:

  • IHost: se utiliza para iniciar y detener el host
  • IApplicationBuilder: se utiliza para construir la canalización de middleware
  • IEndpointRouteBuilder: se usa para agregar puntos finales

También puedes llamar al método CreateDefaultBuilder para crear un host. Este método se usa para inicializar una nueva instancia de la clase WebHostBuilder con valores predeterminados preconfigurados.

El siguiente fragmento de código muestra cómo se puede utilizar el método CreateDefaultBuilder:

var host = new WebHostBuilder()
      .UseKestrel()
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseIISIntegration()
      .UseStartup<Startup>()
      .Build();

Ten en cuenta que las clases WebApplication y WebApplicationBuilder se introdujeron en ASP.NET Core 6.

El método de extensión ConfigureWebHostDefaults() se puede utilizar para configurar un host de aplicación web seleccionando Kestrel como servidor web y configurándolo mediante los proveedores de configuración de alojamiento de la aplicación.

La clase Program en .NET y .NET Core

Un proyecto .NET o .NET Core necesita un punto de entrada para comenzar. El método Main() es el punto de entrada en una aplicación .NET o .NET Core. Debido a que Main() es el punto de entrada de tu aplicación, puedes tener uno y solo un método Main() en tu proyecto. Aunque puedes colocar Main() en cualquier parte de tu proyecto, generalmente se encuentra en una clase llamada Program, almacenada en un archivo llamado Program.cs.

La clase Program en ASP.NET Core 5

Así es como se vería una clase de Program mínima en .NET Core 5:

public class Program
{
      public static void Main(string[] args) {
            CreateHostBuilder(args).Build().Run();
      }
      public static IHostBuilder CreateHostBuilder(string[] args) {
            return Host.CreateDefaultBuilder(args).
            ConfigureWebHostDefaults(x => x.UseStartup <Startup> ());
      }
}

La clase de Program en ASP.NET Core 6

Cuando creas un nuevo proyecto web en ASP.NET Core 6, tendrás un archivo Program.cs. Sin embargo, a diferencia de ASP.NET Core 5 (y todas las versiones anteriores de ASP.NET Core), el proyecto no generará un archivo Startup.cs. El código generado por defecto de la clase Program en ASP.NET Core 6 se verá así:

var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.MapControllers();
app.Run();

La clase Startup en .NET y .NET Core

La clase Startup contiene los métodos ConfigureServices y Configure. Mientras que el primero se usa para configurar los servicios requeridos, el segundo se usa para configurar la canalización de procesamiento de solicitudes.

El método Configure se ejecuta inmediatamente después del método ConfigureServices. Ambos métodos son llamados por el runtime cuando se inicia la aplicación. En tiempo de ejecución, el host .NET pasa una instancia de IApplicationBuilder al método Configure. De forma predeterminada, ConfigureServices agrega los servicios al contenedor integrado.

El siguiente código ilustra cómo se organiza la clase Startup:

public class Startup
  {
        public void ConfigureServices(IServiceCollection services)
        {
            //Write code to add services to the container here
        }
        public void Configure(IApplicationBuilder app)
        {
         //Write code here to configure the request processing pipeline
        }
      //Other members have been removed for brevity
   }

También tendrías un constructor en la clase Startup que se usaría para inicializar una instancia de IConfiguration, como se ilustra en el código de la siguiente sección.

Usar la clase Startup en ASP.NET Core 6

Aunque la clase de Startup no se genera de forma predeterminada en ASP.NET Core 6, puedes usar la clase Startup en ASP.NET Core 6 si lo deseas. Para hacer esto, debes crear una clase llamada Startup (también puedes especificar cualquier otro nombre) e ingresar los métodos ConfigureServices y Configure como se muestra a continuación.

public class Startup
  {
        public Startup(IConfigurationRoot configuration)
        {
            Configuration = configuration;
        }
        public IConfigurationRoot Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
        }
        public void Configure(IApplicationBuilder app)
        {
            app.UseRouting();
            app.UseEndpoints(x => x.MapControllers());
        }
   }

Los métodos UseRouting y UseEndpoints se usan para agregar y configurar el middleware de enrutamiento a la canalización de procesamiento de solicitudes. El código de la clase Program debe hacer referencia a la clase Startup recién creada. Para hacer esto, reemplaza el código existente de la clase Program con el siguiente código:

var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);
var app = builder.Build();
startup.Configure(app);
app.Run();

Ahora establece un punto de interrupción en los métodos ConfigureServices y Configure de la clase Startup que creamos anteriormente. Observarás que los puntos de interrupción se alcanzan cuando ejecutas la aplicación.

El nuevo modelo de hosting mínimo en ASP.NET Core 6 te permite escribir menos código repetitivo para que tu aplicación esté en funcionamiento. Para mantener la compatibilidad con versiones anteriores, aún puedes usar la clase Startup en ASP.NET Core 6.

Compartir artículo:

Más artículos geniales

Aprende a programar un Sistema de Inventarios con net core y sql server

Aprende a programar un Sistema de Inventarios con net core y sql server

Resumen: Este es el primer artículo y video para aprender a programar con ASP.NET Core y base de datos SQL Server con un sistema de inventarios, en esta primera entrega aprenderás a diseñar una base de datos SQL Server relacional.

Ver artículo completo
Aprende a integrar pagos con PayPal en ASP.NET Core: Configurar la API REST de PayPal en ASP.NET Core

Aprende a integrar pagos con PayPal en ASP.NET Core: Configurar la API REST de PayPal en ASP.NET Core

En este artículo te enseñare a configurar API REST de PayPal para consumirlo en ASP.NET para recibir pagos en tu página web desarrollada con ASP.NET Core

Ver artículo completo
Middleware en ASP.NET 6: condiciones para agregar middleware a la canalización

Middleware en ASP.NET 6: condiciones para agregar middleware a la canalización

En esta parte final de la serie, mostraremos dos formas de ejecutar condicionalmente el middleware en la canalización: usando la configuración en el archivo AppSettings.json

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla