Sobes.tech
Middle

Action фильтри эмне жана ал кандай функцияларды аткарат?

sobes.tech AI

AIден жооп

Action фильтрлери ASP.NET Core — бул атайын түрдөгү фильтрлер, алар контроллердун аракет методу аткарылышын кармайт.

Негизги функциялары:

  • Аракет аткарылгандан мурда: Кодду аткаруу аракеттери, аракет методу чакырылгандан кийин (OnActionExecuting).
  • Аракет аткарылгандан кийин: Кодду аткаруу аракеттери, аракет методу чакырылган соң, бирок натыйжаны форматтоо алдында (OnActionExecuted).
  • Контекстти өзгөртүү: Аракет аткаруу контекстин (ActionExecutingContext) же аткаруудан кийин контекстти (ActionExecutedContext) өзгөртүүгө болот, мисалы, HttpContext.Itemsке маалымат кошуу, маршрутту өзгөртүү же аракеттин натыйжасын коюу.
  • Ката иштетүү: Түздөн-түз каталарды иштетпейт, бирок OnActionExecuting учурунда каталар болсо, катанын натыйжасын коюу үчүн колдонулушу мүмкүн.

Колдонуу мисалдары:

  • Аракетке чакырылгандан мурун суроо маалыматтарын текшерүү.
  • Жооптун башын кошуу же денесин өзгөртүү.
  • Суроо жана жооп тууралуу маалыматтарды каттоо.
  • Натыйжаларды кэшке сактоо.
  • Авторизация жана аутентификацияны аткаруу (башкача айтканда, бул үчүн көбүнесе атайын Authorization жана Authentication фильтрлери колдонулат).

Ишке ашыруу: ActionFilterAttributeтен мурас алуу же IActionFilter (синхрондуу) же IAsyncActionFilter (асинхрондуу) интерфейсин ишке ашыруу аркылуу түзүлөт.

// Жөнөкөй синхрондуу Action фильтринин мисалы
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        // Аракетке чейин логика
        Console.WriteLine("Аракетке чейин");
        base.OnActionExecuting(context);
    }

    public override void OnActionExecuted(ActionExecutedContext context)
    {
        // Аракеттен кийин логика
        if (context.Exception == null && context.Result is ObjectResult objectResult)
        {
            // Натыйжаны өзгөртүү, эгер каталар жок жана натыйжа ObjectResult болсо
            Console.WriteLine($"Аракеттин натыйжасынын статус коду: {objectResult.StatusCode}");
        }
        Console.WriteLine("Аракеттен кийин");
        base.OnActionExecuted(context);
    }
}

Колдонуу үчүн контроллерлерге же аракет методуна атрибут аркылуу:

[CustomActionFilter] // Контроллерге колдонуу
public class HomeController : Controller
{
    [HttpGet]
    [CustomActionFilter] // Аракет методуна колдонуу
    public IActionResult Index()
    {
        return Ok("Салам, Indexтен!");
    }
}