过滤器判断请求参数中是否含有某一字段

最近遇到一个需求,在执行Controller方法时,需要判断该方法的请求参数中是否含有某一字段,有则赋值,在实际开发过程中应该是常见的,本篇博客介绍如何使用过滤器的方式来完成该需求。

新建过滤器RequestModelFilter

public class RequestModelFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        //获取controller请求参数对象
        var obj = context.ActionArguments.Values.FirstOrDefault();

        if (obj != null)
        {
            //判断参数对象中是否含有ShopId
            PropertyInfo _findedPropertyInfo = obj.GetType().GetProperty("ShopId");
            if (_findedPropertyInfo != null)
            {
                //创建请求对象实例
                var aimData = Activator.CreateInstance(obj.GetType());
                //判断请求对象是否继承请求基类BaseRequestModel
                if (aimData is BaseRequestModel)
                {
                    aimData = obj;
                    //拿到session给参数赋值
                    ((BaseRequestModel)aimData).ShopId = 
                        Convert.ToInt32(context.HttpContext.Session.GetInt32("ShopId"));
                    //设置参数对象的值
                    context.ActionArguments["model"] = aimData;
                }
            }
        }

        base.OnActionExecuting(context);
    }
}

在需要判断请求参数中是否有ShopId字段的Controller或方法中加入 RequestModelFilter过滤器 即可完成该需求

End!

posted @ 2021-04-02 11:26  Wahaha、  阅读(575)  评论(0编辑  收藏  举报