zoukankan      html  css  js  c++  java
  • ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

    用过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的值。

  • 相关阅读:
    Linux oracle操作
    Job
    Oracle创建表空间和用户并分配权限
    Oracle赋予用户查询另一个用户所有表的权限
    plsql中文乱码解决方案
    PLSQL创建Oracle定时任务,定时执行存储过程
    fcntl函数参数F_GETPIPE_SZ、F_SETPIPE_SZ报错引出的关于linux-specific头文件的使用方法
    从Windows Server 2008 迁移mantis到CentOS 6.8
    从Windows Server 2008 迁移VisualSVN到CentOS 6.8
    CentOS 6.8上开启NFS服务给不同用户使用的曲线设置方法
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10254526.html
Copyright © 2011-2022 走看看