Cet article présente principalement en détail le filtre ActionFilter du filtre asp.net core MVC, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer
Cette série de cours expliquera l'utilisation des éléments intégrés. les filtres dans asp.net core MVC seront divisés en chapitres suivants
asp.net core MVC filter ExceptionFilter filter (1)
asp.net core MVC Filter ActionFilter filter (2)
Filtre MVC de base asp.net Filtre ResultFilter (3)
Filtre MVC de base asp.net Filtre ResourceFilter (4)
Filtre AuthorizationFilter du filtre MVC de base asp.net (5)
Introduction
Le filtre d'action sera exécuté avant et après l'action du contrôleur. Exécutez la méthode correspondante.
Implémentation d'un filtre d'action personnalisé
La personnalisation d'un filtre d'exception global nécessite l'implémentation de l'interface IActionFilter
public class ActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { Console.WriteLine("action执行之后"); } public void OnActionExecuting(ActionExecutingContext context) { Console.WriteLine("action执行之前"); } }
IActionFilter doit implémenter deux méthodes, OnActionExecuted et OnActionExecuting. OnActionExecuting sera exécuté avant l'action et OnActionExecuted sera exécuté après l'action.
Après avoir connu le principe, nous pouvons utiliser ses fonctionnalités pour simplifier notre code. Un concept important dans MVC est la vérification du modèle. Nous définissons les contraintes du modèle, puis vérifions si le modèle est lié avec succès dans l'action. code suivant dans notre action
[HttpGet] public ActionResult Get() { if (!ModelState.IsValid) return BadRequest("参数错误!"); }
Un tel code répété augmente non seulement la complexité du code mais semble également inesthétique. Nous pouvons le compléter automatiquement dans ActionFilter
<. 🎜>public void OnActionExecuting(ActionExecutingContext context) { if (context.ModelState.IsValid) return; var modelState = context.ModelState.FirstOrDefault(f => f.Value.Errors.Any()); string errorMsg = modelState.Value.Errors.First().ErrorMessage; throw new AppException(errorMsg); }
public class ActionFilter : IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { var httpContext = context.HttpContext; var stopwach = httpContext.Items[Resources.StopwachKey] as Stopwatch; stopwach.Stop(); var time = stopwach.Elapsed; if (time.TotalSeconds > 5) { var factory = context.HttpContext.RequestServices.GetService<ILoggerFactory>(); var logger = factory.CreateLogger<ActionExecutedContext>(); logger.LogWarning($"{context.ActionDescriptor.DisplayName}执行耗时:{time.ToString()}"); } } public void OnActionExecuting(ActionExecutingContext context) { var stopwach = new Stopwatch(); stopwach.Start(); context.HttpContext.Items.Add(Resources.StopwachKey, stopwach); } }
Enregistrer le filtre global
La méthode d'enregistrement est la même que celle d'ExceptionFinter. Recherchez le fichier Startup.cs dans le répertoire racine du système et modifiez ConfigureServices comme suitCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!