¿Cómo aplicas filtros en pipelines en C#? ¿Puedes dar ejemplos de su uso?
sobes.tech AI
Respuesta de la IA
Los filtros en los pipelines de C# se utilizan para interceptar e intervenir en diferentes etapas del procesamiento de una solicitud o la ejecución de una tarea. En aplicaciones web ASP.NET Core, permiten agregar lógica antes, después o durante la ejecución de los métodos de acción de los controladores, así como en otros niveles de procesamiento de solicitudes.
Ejemplos de uso de filtros en ASP.NET Core:
-
Filtros de Autenticación y Autorización: Determinan si un usuario está autorizado para realizar una acción específica.
// Ejemplo de atributo Authorize [Authorize] public class HomeController : Controller { public IActionResult Index() { return View(); } } -
Filtros de recursos: Se ejecutan primero después de los filtros de autorización. Pueden realizar caching o interrumpir el pipeline.
// Ejemplo de filtro de recursos para caching public class CacheResourceFilter : IResourceFilter { public void OnResourceExecuting(ResourceExecutingContext context) { // Lógica antes de ejecutar la acción } public void OnResourceExecuted(ResourceExecutedContext context) { // Lógica después de ejecutar la acción, pero antes de escribir la respuesta } } -
Filtros de acción: Se ejecutan antes y después del método de acción del controlador. Son útiles para validar datos, registrar logs o modificar parámetros y resultados.
// Ejemplo de filtro de acción para logging public class LogActionFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { // Lógica antes de ejecutar la acción Console.WriteLine($"Ejecutando acción: {context.ActionDescriptor.DisplayName}"); } public void OnActionExecuted(ActionExecutedContext context) { // Lógica después de ejecutar la acción Console.WriteLine($"Acción ejecutada: {context.ActionDescriptor.DisplayName}"); } } // Aplicar filtro de acción a un método [LogActionFilter] public IActionResult About() { return View(); } -
Filtros de excepciones: Manejan excepciones no controladas que ocurren durante la ejecución del método de acción u otros filtros.
// Ejemplo de filtro de excepción para manejo de errores public class CustomExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { // Lógica para manejar la excepción context.Result = new ContentResult() { Content = "Ocurrió un error.", StatusCode = 500 }; context.ExceptionHandled = true; // Indica que la excepción ha sido manejada } } // Aplicar filtro de excepción a un controlador [CustomExceptionFilter] public class ErrorController : Controller { public IActionResult Index() { throw new Exception("¡Algo salió mal!"); } } -
Filtros de resultados: Se ejecutan antes y después de la ejecución del método de resultado (por ejemplo, antes o después de ViewResult, JsonResult, etc.).
// Ejemplo de filtro de resultado para modificar el resultado public class CustomResultFilter : IResultFilter { public void OnResultExecuting(ResultExecutingContext context) { // Lógica antes de ejecutar el método de resultado Console.WriteLine($"Ejecutando tipo de resultado: {context.Result.GetType().Name}"); } public void OnResultExecuted(ResultExecutedContext context) { // Lógica después de ejecutar el método de resultado Console.WriteLine($"Tipo de resultado ejecutado: {context.Result.GetType().Name}"); } }
Los filtros pueden aplicarse globalmente (para todas las solicitudes), a nivel de controlador o a nivel de método de acción específico. El orden de ejecución en el pipeline está determinado por su tipo.