POLITICA DE COOKIES

Q2BSTUDIO.COM utiliza cookies técnicas, analíticas, de sesión y de publicidad con la finalidad de prestar un mejor servicio. No obstante, necesitamos su consentimiento explícito para poder utilizarlas. Así mismo puede cambiar la configuración de las cookies u obtener más información aquí .

Dominando Interceptores de Base de Datos en .NET Core Web API

Dominando Interceptores de Base de Datos en .NET Core Web API

Publicado el 03/09/2025

1. Introducción

Al crear aplicaciones modernas .NET Web API, las operaciones de base de datos son el centro de todo. ¿Alguna vez te has preguntado qué consultas SQL se están ejecutando, cómo medir su rendimiento o si es posible detener comandos peligrosos antes de que lleguen a la base de datos? La respuesta está en los interceptores de base de datos.

En este artículo repasamos la interceptación en Entity Framework Core para .NET 6, 7, 8 y 9. Empezaremos por lo básico registrando consultas y avanzaremos hacia escenarios de nivel experto como monitorización de rendimiento, auditoría y bloqueo de SQL potencialmente dañino.

En Q2BSTUDIO impulsamos el diseño de arquitecturas robustas para APIs y microservicios, integrando prácticas de ciberseguridad, observabilidad y escalabilidad. Somos una empresa de desarrollo de software y aplicaciones a medida, especialistas en inteligencia artificial, ciberseguridad, servicios cloud AWS y Azure, servicios de inteligencia de negocio y power bi, agentes IA e IA para empresas.

2. Requisitos previos

- Un proyecto Web API en .NET 6, 7, 8 o 9 - Conocimientos básicos de Entity Framework Core - Paquetes NuGet de EF Core instalados: Microsoft.EntityFrameworkCore y Microsoft.EntityFrameworkCore.SqlServer

3. Nivel principiante: configurar Web API con EF Core

Define una entidad simple como User con un Id y un Name, y un DbContext que exponga DbSet de Users. En Program.cs registra el contexto usando UseSqlServer con tu cadena de conexión y agrega un endpoint mínimo, por ejemplo GET para devolver la lista de usuarios con ToListAsync.

4. Interceptor de registro de SQL

Un interceptor permite engancharse al ciclo de vida de los comandos antes de enviarlos a la base de datos. Con DbCommandInterceptor puedes sobrescribir métodos como ReaderExecuting y NonQueryExecuting para escribir en el log el SQL generado por EF Core. Útil para depurar, entender cómo LINQ se traduce a SQL y tener visibilidad total.

5. Medición de rendimiento

Además del log, mide el tiempo de ejecución de cada consulta. En los métodos ReaderExecuted y NonQueryExecuted puedes leer Duration de CommandExecutedEventData y registrar los milisegundos consumidos. Recomienda truncar la sentencia SQL al registrar para evitar logs enormes y activar EnableSensitiveDataLogging solo en entornos de desarrollo.

6. Bloqueo de SQL peligroso

Para evitar acciones destructivas por error, intercepta comandos antes de ejecutarse. Un patrón común: detectar DELETE sin cláusula WHERE. Normaliza el SQL, ignora espacios y comentarios iniciales y verifica si comienza con DELETE y no contiene WHERE. En ese caso lanza una excepción para bloquear la operación. Extiende el enfoque para otros casos como TRUNCATE o DROP según tus políticas de seguridad.

7. Nivel héroe: auditoría de acciones

Con SaveChangesInterceptor puedes auditar quién ejecuta una operación de escritura. Inyecta IHttpContextAccessor para obtener el usuario autenticado y registra información como nombre de usuario, marca de tiempo, endpoint y correlación. Si necesitas auditoría completa, escribe eventos en una tabla de auditoría o en un sistema de logs estructurados.

8. Registro de interceptores en Program.cs

- Agrega IHttpContextAccessor al contenedor - Registra tus clases interceptor como servicios de IInterceptor con AddScoped - En AddDbContext recupera todos los IInterceptor del contenedor e inviértelos en AddInterceptors - Para desarrollo, habilita EnableSensitiveDataLogging y LogTo para ver el SQL y los tiempos en consola

9. Controlador de usuarios y lógica simple

- GET api/users devuelve los usuarios y dispara los métodos ReaderExecuting y ReaderExecuted - POST api/users crea un usuario y dispara SaveChangesInterceptor y NonQuery - DELETE api/users/dangerous ejecuta un DELETE directo para validar que el interceptor de seguridad bloquee la instrucción sin WHERE

10. Cómo probar paso a paso

- Ejecuta la aplicación con dotnet run y observa la consola - Crea la base de datos y aplica migraciones con dotnet ef migrations add Init y dotnet ef database update - Prueba logging y rendimiento con GET https://localhost:5000/api/users; deberías ver en consola el SELECT a Users y el tiempo en ms - Prueba auditoría con POST https://localhost:5000/api/users?name=Alice; espera ver un mensaje de auditoría y el INSERT con su tiempo - Prueba seguridad con DELETE https://localhost:5000/api/users/dangerous; espera un error 500 y en consola un mensaje de bloqueo de DELETE sin WHERE

11. Mejores prácticas

- Mantén los interceptores ligeros, sin lógicas de larga duración - Emplea logging estructurado con soluciones como Serilog, Seq o Application Insights en lugar de Console - Separa responsabilidades en interceptores distintos para logging, rendimiento, auditoría y seguridad - Mide el impacto de rendimiento antes de llevarlo a producción - Añade pruebas automatizadas que validen que las reglas de seguridad bloquean los comandos críticos - Centraliza configuración de exclusiones para evitar falsos positivos en tareas de mantenimiento controlado

12. Conclusión

Los interceptores de base de datos en EF Core son una herramienta potente y poco aprovechada que te permite observar, manipular y mejorar las operaciones con la base de datos sin ensuciar tu lógica de negocio. Con ellos puedes: registrar todas las consultas, monitorizar tiempos de ejecución, bloquear comandos de riesgo y auditar acciones de usuario. En conjunto, elevan la calidad operativa de tus APIs, mejoran la trazabilidad y refuerzan la seguridad.

Si tu organización necesita llevar estas prácticas a producción con gobernanza, automatización y despliegues en la nube, en Q2BSTUDIO te ayudamos a construir soluciones de aplicaciones a medida y software a medida con enfoque en calidad, observabilidad y seguridad. Descubre más sobre cómo diseñamos productos robustos en nuestra página de aplicaciones a medida y cómo potenciamos modelos y copilotos con inteligencia artificial para acelerar tus casos de uso.

13. Descarga de código

El proyecto de ejemplo se encuentra en GitHub: código de referencia con interceptores

Extras y consejos operativos

- Observabilidad: captura métricas por tipo de comando, duración p95 y p99, y correlación con trazas distribuidas - Seguridad: añade listas de permitidos para sentencias administrativas ejecutadas por migraciones o tareas programadas, y registra quién las ejecuta - Rendimiento: utiliza caché de resultados en consultas muy repetidas y revisa los planes de ejecución derivados de LINQ complejo - Cloud: integra logs y métricas con servicios cloud aws y azure, revisa retención y costes, y establece alertas proactivas - IA y negocio: combina registros de auditoría con servicios inteligencia de negocio y power bi para detectar patrones y anomalías que respalden decisiones

Fin del artículo, inicio de la diversión
Construyendo software juntos

Dando vida a tus ideas desde 2008

Diseñamos aplicaciones móviles y de escritorio innovadoras que cumplen con tus requisitos específicos y mejoran la eficiencia operativa.
Más info
Cuéntanos tu visión
Sea cual sea el alcance, podemos convertir tu idea en realidad. Envíanosla y charlemos sobre tu proyecto o una colaboración futura.
Contáctanos
artículos destacados
Live Chat
Enviado correctamente.

Gracias por confiar en Q2BStudio