用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器。最近才发现IActionFilter的OnActionExecuting方法,甚至可以获取Controller的Action方法参数值。

假如我们在ASP.NET Core MVC项目中有一个HomeController,其中有一个Action方法叫Login,该方法有一个LoginLogoutRequest类型的参数,注意我们在Login上注册了我们后面会讲解的MyActionFilter拦截器:

public class HomeController : Controller
{
[MyActionFilter]
[HttpPost]
public IActionResult Login([FromBody]LoginLogoutRequest loginLogoutRequest)
{
return View();
}
}

其参数LoginLogoutRequest类的定义如下:

public class LoginLogoutRequest
{
public string Username { get; set; }
public string Password { get; set; } }

那么我们可以定义一个IActionFilter拦截器叫MyActionFilter,在其OnActionExecuting方法中,来获取HomeController中Action方法Login的参数LoginLogoutRequest:

public class MyActionFilterAttribute : Attribute, IActionFilter
{
/// <summary>
/// OnActionExecuting方法在Controller的Action执行前执行
/// </summary>
public void OnActionExecuting(ActionExecutingContext context)
{
//循环获取在Controller的Action方法中定义的参数
foreach (var parameter in context.ActionDescriptor.Parameters)
{
var parameterName = parameter.Name;//获取Action方法中参数的名字
var parameterType = parameter.ParameterType;//获取Action方法中参数的类型 //判断该Controller的Action方法是否有类型为LoginLogoutRequest的参数
if (parameterType == typeof(LoginLogoutRequest))
{
//如果有,那么就获取LoginLogoutRequest类型参数的值
var loginLogoutRequest = context.ActionArguments[parameterName] as LoginLogoutRequest; var username = loginLogoutRequest.Username;
var password = loginLogoutRequest.Password;
}
}
} /// <summary>
/// OnActionExecuted方法在Controller的Action执行后执行
/// </summary>
public void OnActionExecuted(ActionExecutedContext context)
{
//TODO
}
}

可以看到在IActionFilter的OnActionExecuting方法中,通过很简单的代码,我们就可以获取到Login方法参数LoginLogoutRequest的值。

最新文章

  1. VMware 12 CentOS Minimal 安装VMwareTools 找不到头文件kernelheaders
  2. codeIgniter 文件路径的问题
  3. iphone/ipad关于size, frame and bounds总结和UIScroll view学习笔记
  4. linux下主要是VirtualBox及GuestAdditions的安装
  5. Beta冲刺NO.1
  6. 修改Tomcat访问的端口号
  7. vue iview UPload,但文件上传是,clearFiles的使用方法
  8. 为什么ArrayList、LinkedList线程不安全,Vector线程安全
  9. 框架源码系列十二:Mybatis源码之手写Mybatis
  10. HOWTO For iSCSI-SCST &amp;&amp; Gentoo HOWTO For iSCSI-SCST
  11. H - Repeats (重复最多子串的次数)
  12. 关于Javascript闭包(Closure)
  13. vuejs之Vue Devtools
  14. 【转】每天一个linux命令(34):du 命令
  15. Windows和linux虚拟机之间联网实现SSH远程连接以及VMware的3种网络模式[NAT、桥接和Host-only]
  16. RocketMQ集群搭建
  17. 软工读书笔记 week3 (《黑客与画家》上)
  18. 如何不使用 submit 按钮来提交表单?
  19. 书籍《深入理解Spring Cloud 与微服务构建》勘误、源码下载
  20. PC如何访问手机网址

热门文章

  1. 从零开始学习html(十)CSS格式化排版——下
  2. css3统一元素的宽和高
  3. 安卓开发环境配置之Windows+ADT+eclipse
  4. React Native八大Demo
  5. 使用redis 处理高并发场景
  6. LeetCode题解之Convert BST to Greater Tree
  7. VS插件VisualSVN v5.2.3.0 破解文件
  8. poj_3253 Fence Repair
  9. Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  10. Use Jupyter notebook on Fedora 28