Castle动态代理拦截

比如现在有一个方法,进行积分奖励

PointAdd

 

在不改变原来方法的基础上,增加积分奖励的日志

 

复制代码
using Castle.DynamicProxy; 
public class AuditTraceInterceptor : IInterceptor
    {
        public void Intercept(IInvocation invocation)
        {
            var methodInfo = invocation.Method;
            if (methodInfo == null)
            {
                methodInfo = invocation.MethodInvocationTarget;
            }

            var trace = methodInfo.GetCustomAttributes<AuditTraceAttribute>(true).FirstOrDefault();

            if (trace != null)
            {
                var actionLog = new UserActionEntity
                {
                    ApplicationType = "MyApplication",
                    ProgramId = PageBase.CurrentProgramID,
                    UserId = BOPageBase.CurrentUser.ID,
                    ActionType = trace.ActionType,
                    SessionId = HttpContext.Current.Session.SessionID,
                    PageRelativeUrl = HttpContext.Current.Request.Url.PathAndQuery,
                    IpAddress = HttpContext.Current.Request.UserHostAddress
                };
                var requestURL = HttpContext.Current.Request.Path;
                var pageName = requestURL.Substring(requestURL.LastIndexOf("/") + 1, requestURL.Length - requestURL.LastIndexOf("/") - 1);
                actionLog.PageName = pageName;
                LogUtil.CreateLog(LogLevel.Message, $"Method {methodInfo.Name} has been Intercepted");
                foreach (var item in invocation.Arguments)
                {
                    LogUtil.CreateLog(LogLevel.Message,item.ToString());
                }
            }

            invocation.Proceed();

            LogUtil.CreateLog(LogLevel.Message, "Method has been Intercepted Done");

        }
    }
复制代码

 

Castle~动态代理实现对方法的拦截

 

作者:Chuck Lu    GitHub    
posted @   ChuckLu  阅读(372)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2018-05-17 postman
2018-05-17 FileZilla文件下载的目录
2017-05-17 常用的正则表达式
2017-05-17 Task Scheduler
2017-05-17 HMACSHA256 Class
2016-05-17 Get Length 使用dynamic关键字
2015-05-17 对象池的实际应用
点击右上角即可分享
微信分享提示