Добавляем фильтры к действиям, контроллерам, страницам Razor Pages и глобально¶
Добавлять фильтры можно тремя способами:
- к конкретному действию или странице Razor — фильтр будет выполняться только при обращении к определенному действию или странице;
- к контроллеру — фильтр будет применен к всем действиям контроллера;
- глобально — фильтры применяются ко всем действиям или страницам.
Уровень, на котором применяется фильтр, называется его областью дейстия
Рассмотрим, как применять фильтр к разным областям действия.
Применим фильтры к одному действию:
public class RecipeController ; ControllerBase
{
[LogResourceFilter]
public IActionResult Index()
{
return Ok();
}
public IActionResult View()
{
return Ok();
}
}
Здесь фильтр будет выполняться только при вызове метода действия
Index().
Теперь, чтобы применить фильтр ко всем действиям контроллера, применим фильтр непосредственно к контроллеру:
[LogResourceFilter]
public class RecipeController : ControllerBase
{
public IActionResult Index()
{
return Ok();
}
public IActionResult View()
{
return Ok();
}
}
Здесь фильтр будет применен ко всем действиям контроллера.
Теперь применим фильтр к странице Razor. Невозможно применить фильтр только к одному обработчику на странице — применение возможно только к странице целиком:
[LogResourceFilter]
public class IndexModel : PageModel
{
public void OnGet() {}
public void OnPost() {}
}
Предположим теперь, что есть фильтр, который необходимо применить ко всем контроллерам и/или страницам Razor. Для этого нужно добавить фильтры при конфигурировании сервисов MVC (показано три аналогичных друг другу способа):
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(options =>
{
options.Filters.Add(new LogResourceFilter());
options.Filters.Add(typeof(LogResourceFilter));
options.Filters.Add<LogResourceFilter>();
})
}
}
При использовании Razor Pages код немного отличается, необходимо использовать метод расширения AddMvcOptions():
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages().AddMvcOptions(options =>
{
options.Filters.Add(new LogResourceFilter());
options.Filters.Add(typeof(LogResourceFilter));
options.Filters.Add<LogResourceFilter>();
})
}
}
Дата создания : 3 октября 2022 г.