最近遇到一个需求,在执行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!