Middle
Филтри Action چیست و چه وظایفی انجام میدهد؟
sobes.tech AI
Ҷавоб аз AI
Филтрите за действия в 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!");
}
}