过滤器判断请求参数中是否含有某一字段
最近遇到一个需求,在执行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!