Sobes.tech
Middle+

C#'та pipeline'дарда фильтрлерди кантип колдонуп жатасыз? Алардын колдонуу мисалдарын бере аласызбы?

sobes.tech AI

AIден жооп

C# конвейерлериндеги фильтрлер суранычтын ишке ашырылышынын ар кандай этаптарында кармоо жана кийлигишүү үчүн колдонулат. ASP.NET Core веб-кушымталарында алар контроллерлердин аракеттеринин методдорун ишке ашыруунун алдын, кийин жана учурунда логика кошууга мүмкүндүк берет, ошондой эле суранычтарды иштетүүнүн башка деңгээлдеринде.

ASP.NET Coreдеги фильтрлердин колдонуу мисалдары:

  1. Аутентификация жана уруксат берүү (Authentication/Authorization Filters): Колдонуучу белгилүү бир аракетти аткарууга укуктуу экенин аныктайт.

    // Authorize атрибутунун мисалы
    [Authorize]
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
    
  2. Ресурстардын фильтрлери (Resource Filters): Уруксат берүү фильтрлеринен кийин биринчи болуп ишке ашат. Алар кэшке салуу же конвейерди үзүү үчүн колдонулушу мүмкүн.

    // Кэшке салуу үчүн ресурс фильтринин мисалы
    public class CacheResourceFilter : IResourceFilter
    {
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            // Аракетке чейин логика
        }
    
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            // Аракетке кийин, жооп жазылгандан кийин логика
        }
    }
    
  3. Аракеттер фильтрлери (Action Filters): Контроллердин аракеттеринин методуна чейин жана кийин ишке ашат. Маалыматтарды текшерүү, журнал жүргүзүү же параметрлер жана натыйжаларды өзгөртүү үчүн ылайыктуу.

    // Журнал жүргүзүү үчүн Action Filter мисалы
    public class LogActionFilter : IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            // Аракетке чейин логика
            Console.WriteLine($"Executing action: {context.ActionDescriptor.DisplayName}");
        }
    
        public void OnActionExecuted(ActionExecutedContext context)
        {
            // Аракеттен кийин логика
            Console.WriteLine($"Executed action: {context.ActionDescriptor.DisplayName}");
        }
    }
    
    // Action Filter колдонуу контроллердин методуна
    [LogActionFilter]
    public IActionResult About()
    {
        return View();
    }
    
  4. Ката фильтрлери (Exception Filters): Ишке ашырылбаган ката-чыгымдарды иштетет, алар Аракеттин методу же башка фильтрлердин иштөө учурунда пайда болот.

    // Ката өңдүү ката-чыгымдарды иштетүү үчүн Exception Filter мисалы
    public class CustomExceptionFilter : IExceptionFilter
    {
        public void OnException(ExceptionContext context)
        {
            // Ката өңдүү иштетүү логикасы
            context.Result = new ContentResult()
            {
                Content = "An error occurred.",
                StatusCode = 500
            };
            context.ExceptionHandled = true; // Ката иштетилди деп белгилөө
        }
    }
    
    // Контроллерге Exception Filter колдонуу
    [CustomExceptionFilter]
    public class ErrorController : Controller
    {
        public IActionResult Index()
        {
            throw new Exception("Something went wrong!");
        }
    }
    
  5. Натыйжалар фильтрлери (Result Filters): Аракеттин натыйжасынын методуна чейин жана кийин ишке ашат (мисалы, ViewResult, JsonResult жана башка).

    // Натыйжаны өзгөртүү үчүн Result Filter мисалы
    public class CustomResultFilter : IResultFilter
    {
        public void OnResultExecuting(ResultExecutingContext context)
        {
            // Натыйжа методуна чейин логика
            Console.WriteLine($"Executing result type: {context.Result.GetType().Name}");
        }
    
        public void OnResultExecuted(ResultExecutedContext context)
        {
            // Натыйжа методуна кийин логика
            Console.WriteLine($"Executed result type: {context.Result.GetType().Name}");
        }
    }
    

Фильтрлер глобалдуу (бардык суранычтар үчүн), контроллер деңгээлинде же конкреттүү аракеттин методу деңгээлинде колдонулушу мүмкүн. Алардын ишке ашырылышынын тартиби алардын түрүнө жараша аныкталган.