Este proyecto es una aplicación de ejemplo construida para la serie de artículos sobre Blazor Web Apps en juredev.com/blog.
Puedes leer la serie completa de artículos aquí:
- Blazor Web Apps: ¿Evolución definitiva o cambio de paradigma?
- Blazor Web Apps en la práctica: Elegir y aplicar Render Modes
- Blazor Web Apps en profundidad: Estado, ciclo de vida y pitfalls
- Blazor Web Apps: Arquitectura real, decisiones y trade-offs
El objetivo principal de esta aplicación es demostrar el uso práctico de los diferentes Render Modes introducidos en .NET 8/9/10.
La aplicación implementa una arquitectura modular de grado profesional para soportar el modo Interactive Auto:
- Estructura Multi-proyecto: Separación en proyectos
Server,ClientySharedpara una gestión limpia de dependencias. - Inyección de Dependencias Híbrida: Uso de la misma interfaz (
ITaskService) con implementaciones automáticas según el entorno:ServerTaskService: Acceso directo a datos para ejecución en el servidor (latencia cero).ClientTaskService: Comunicación vía HTTP para ejecución en WebAssembly.
- BFF (Backend-For-Frontend): Implementación de Minimal APIs para exponer datos de forma segura al cliente WASM.
- Autenticación Híbrida: Flujo de seguridad basado en Cookies
HttpOnlyen el servidor con transferencia de identidad a WASM mediantePersistentComponentStatedurante el prerendering.
La aplicación cuenta con tres secciones principales, cada una utilizando un modo de renderizado distinto para optimizar la experiencia del usuario y el rendimiento:
- Home (
/) - Static SSR: Renderizado estático en el servidor. Ideal para contenido público y SEO. Sin conexión persistente (SignalR) ni descarga de WebAssembly. - Tareas (
/tasks) - Interactive Server: Gestión de tareas interactiva procesada íntegramente en el servidor a través de SignalR. Interactividad instantánea sin necesidad de descargar el payload de WebAssembly. - Analíticas (
/analytics) - Interactive Auto: Un híbrido que utiliza el servidor para la carga inicial (rápida) y descarga WebAssembly en segundo plano. Las siguientes interacciones se ejecutan localmente en el navegador. Demuestra el uso dePersistentComponentStatepara evitar la doble ejecución durante el prerendering.
Esta aplicación también ilustra conceptos avanzados de la arquitectura de Blazor:
RendererInfo: Se utiliza en la interfaz gráfica deTasksyAnalyticspara visualizar en tiempo real en qué entorno se está ejecutando el componente (Prerendering, Server o WebAssembly).PersistentComponentState: Implementado enAnalytics.razorpara hidratar el estado del cliente con los datos obtenidos en el servidor durante el Prerendering, evitando llamados redundantes a la base de datos y parpadeos en la interfaz.- Pitfalls de Estado: Comentarios didácticos en
Tasks.razorque advierten sobre la volatilidad del estado almacenado en memoria bajo conexiones SignalR (InteractiveServer).
- .NET 10
- Blazor Web App (Interactive Auto / Per-page interactivity)
- C#
- Bootstrap (CSS)
- Asegúrate de tener instalado el SDK de .NET 10.
- Clona este repositorio.
- Navega a la carpeta del servidor:
cd TaskManagerApp/TaskManagerApp - Ejecuta la aplicación:
dotnet run
- Abre tu navegador en
https://localhost:5172(o el puerto indicado en la consola).
Creado por Jure