7 Aop 上手练习 (2 ActionFilter)(.net 上手笔记 )

81 阅读1分钟

一基础例子。

how 如何实现

加filter


using Microsoft.AspNetCore.Mvc.Filters;

namespace p7.Utils.Filters
{
    public class MyActionFilter : Attribute, IActionFilter
    {

        public void OnActionExecuting(ActionExecutingContext context)
        {
            Console.WriteLine("MyActionFilter.OnActionExecuting");
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            Console.WriteLine("MyActionFilter.OnActionExecuted");
        }

    }
}


//控制器调用。
    
        #region ActionFilter
        [MyActionFilter]
        public IActionResult Index2()
        {
            return View();
        }
        #endregion

image.png

whom 可以做缓存,but不适合。 a ctor b [] c process d [] 围饶action 的前后的。 具体的业务逻辑的前后。适合记录日志。

二实操一个记录日志。


using Microsoft.AspNetCore.Mvc.Filters;
namespace p7.Utils.Filters
{
    public class CustomeLogActionFilter : Attribute, IActionFilter
    {


        private readonly ILogger<CustomeLogActionFilter> _Logger;

        public CustomeLogActionFilter(ILogger<CustomeLogActionFilter> iLogger)
        {
            this._Logger = iLogger;
        }
        
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var para =    context.HttpContext.Request.QueryString.Value;
            var controller = context.HttpContext.GetRouteValue("controller");
            var action = context.HttpContext.GetRouteValue("action");
            _Logger.LogInformation($"执行 {controller} {action} params : {para}");
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            var result = Newtonsoft.Json.JsonConvert.SerializeObject(context.Result);
            var controller = context.HttpContext.GetRouteValue("controller");
            var action = context.HttpContext.GetRouteValue("action");
            _Logger.LogInformation($"执行 {controller} {action} params : {result}");
        }

    }
}

控制器使用的方法 。


        #region ActionFilter
        [TypeFilter(typeof(CustomeLogActionFilter))]
        public IActionResult Index2(int id)
        {
            ViewBag.user = Newtonsoft.Json.JsonConvert.SerializeObject(
                new { Id = id, Name = "Recharge-ViewBag", Age = 34 }
                );

            ViewData["user2"] = Newtonsoft.Json.JsonConvert.SerializeObject(
                new { Id = id, Name = "Recharge-ViewData", Age = 34 }
                );


            object desccription = "welcome to richard is video lesson";

            return View(desccription);
        }

三综合实站, log4net + async 日志。

later