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тен!");
}
}