estructura-de-un-proyecto-aspnet

Estructura de un proyecto ASP.NET

  • 5 min

Cuando arrancamos con un proyecto en ASP.NET Core, una de las primeras preguntas que aparecen es: ¿cómo organizo todo esto?

No existe una única forma “correcta” de hacerlo. Pero vamos a ver más o menos “lo normal”.

Si creas un proyecto con la plantilla de API en .NET, la estructura predeterminada que nos propone Microsoft es algo parecido a esto 👇

📂 MyApiProject/
├── 📂 Controllers/        # Controladores API
├── 📂 Services/           # Lógica de negocio
├── 📂 Models/             # Modelos de datos
├── 📂 DTOs/               # Objetos de transferencia
├── 📂 Properties/         # Configs de lanzamiento
│   └── 📄 launchSettings.json
├── 📂 wwwroot/            # Archivos estáticos
├── 📄 MiPrimerProyecto.csproj
├── 📄 Program.cs          # Punto de entrada
└── 📄 appsettings.json    # Configuración

En este articulo vamos a ver la función de cada uno de estos elementos, como punto de partida para entender el funcionamiento de un proyecto ASP.NET.

Cuando tengas más experiencia, puedes hacer adaptaciones o cambios para adecuarlo a tus gustos y a las necesidades de tu proyecto.

Archivos clave

Algunos de los ficheros más importantes que vas a encontrar en cualquier proyecto ASP.NET son:

El archivo MiProyecto.csproj (o el nombre que le hayas puesto al proyecto) es el fichero de proyecto de .NET. Contiene un listado de dependencias y configuraciones del proyecto.

Program.cs es el punto de entrada. Aquí defines cómo arranca tu app, qué servicios se cargan y cómo se arma el pipeline de middleware.

var builder = WebApplication.CreateBuilder(args);

// Configuración de servicios
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configuración del pipeline HTTP
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();
  • WebApplication.CreateBuilder(args): Crea un constructor de aplicaciones web.
  • app.MapGet(”/”, () => “¡Hola, mundo!“): Define una ruta GET en la raíz que devuelve “¡Hola, mundo!“.
  • app.Run(): Inicia la aplicación.

En appsettings.json van las configuraciones: conexiones a BD, logging, claves, etc. Es el archivo donde ajustas tu aplicación sin tener que recompilar.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=miServidor;Database=miBaseDeDatos;User Id=miUsuario;Password=miContraseña;"
  }
}
  • Logging: Configura los niveles de registro (logging).
  • AllowedHosts: Especifica los hosts permitidos (* permite todos).
  • ConnectionStrings: Define cadenas de conexión para bases de datos.

Este archivo define cómo se levanta la aplicación en distintos entornos (desarrollo, producción, etc.). Muy útil cuando trabajas en local con Visual Studio o la CLI de .NET.

{
  "profiles": {
    "MiPrimerProyecto": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
  • commandName: Indica cómo se ejecuta la aplicación (Project para usar dotnet run).
  • launchBrowser: Abre el navegador automáticamente al iniciar la aplicación.
  • applicationUrl: Define la URL base de la aplicación.
  • environmentVariables: Establece variables de entorno, como el entorno de ejecución (Development).

Antes existía el clásico Startup.cs para configurar servicios y middlewares. Desde .NET 6 en adelante, todo se fusionó en Program.cs para simplificar las cosas.

Estructura de carpetas

Además de los ficheros de configuración, nuestro proyecto de ASP.NET va a tener una estructura de carpetas más o menos complicada (dependerá de nuestro proyecto).

Esta estructura está diseñada para facilitar la organización del código y la separación de responsabilidades. Algunas de las más habituales son:

La carpeta “wwwroot” es el punto de entrada para los archivos estáticos de la aplicación web, como imágenes, archivos CSS y JavaScript.

En esta carpeta se encuentran los recursos que serán accesibles públicamente a través del navegador.

La carpeta “Controllers” contiene las clases controladoras de la aplicación web. Estas clases son responsables de manejar las solicitudes entrantes y generar las respuestas correspondientes.

Cada controlador puede contener diferentes métodos de acción que definen las diferentes rutas y acciones que la aplicación puede manejar.

La carpeta “Views” contiene las vistas de la aplicación web.

En esta carpeta se encuentran los archivos HTML o Razor que definen la estructura y el diseño de las páginas web.

La carpeta “Models” se utiliza para almacenar las clases de modelo de la aplicación web.

Un modelo representa los datos que se utilizan en la aplicación y define su estructura y comportamiento.

Los modelos pueden ser utilizados tanto en los controladores como en las vistas para interactuar con los datos.

La carpeta “Data” se utiliza para almacenar las clases y archivos relacionados con el acceso a datos de la aplicación web.

Aquí se pueden encontrar las clases de contexto de base de datos, los archivos de migración y otros componentes relacionados con el acceso a la base de datos.

La carpeta “Services” se utiliza para almacenar las clases de servicios de la aplicación web.

Los servicios son componentes reutilizables que encapsulan la lógica de negocio y se utilizan para realizar tareas específicas en la aplicación.

Estos servicios pueden ser inyectados en los controladores u otros componentes de la aplicación.