ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值

摘要:
用过ASP.NETCoreMVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的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 classHomeController : Controller
{
    [MyActionFilter]
    [HttpPost]
    publicIActionResult Login([FromBody]LoginLogoutRequest loginLogoutRequest)
    {
        returnView();
    }
}

其参数LoginLogoutRequest类的定义如下:

public classLoginLogoutRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
}

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

public classMyActionFilterAttribute : Attribute, IActionFilter
{
    /// <summary>
    ///OnActionExecuting方法在Controller的Action执行前执行
    /// </summary>
    public voidOnActionExecuting(ActionExecutingContext context)
    {
        //循环获取在Controller的Action方法中定义的参数
        foreach (var parameter incontext.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] asLoginLogoutRequest;
                var username =loginLogoutRequest.Username;
                var password =loginLogoutRequest.Password;
            }
        }
    }
    /// <summary>
    ///OnActionExecuted方法在Controller的Action执行后执行
    /// </summary>
    public voidOnActionExecuted(ActionExecutedContext context)
    {
        //TODO
}
}

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

免责声明:文章转载自《ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇再出发Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ajax的完整兼容各种浏览器版本代码

<script type="text/javascript"> function createAjax(){var request=false;//window对象中有XMLHttpRequest存在就是非IE,有可能是(IE7,IE8)if(window.XMLHttpRequest){request=new XMLHttpRequest()...

js中如何通过身份证号计算出生日期和年龄

在html中有如下标签 身份证号:<input type="text" id="Gra_IDCard" onChange="IDCardChange()"/> <br/> 出生日期:<input type="date" id="Gra_BirthDate"/> <br/> 用...

JS 如何截取日期部分呢?

最佳答案   如果这个日期格式是固定的话: var time = strTime.substring(0, strTime.indexOf(' '));这样就可以了。 其中indexOf(' ')表示第一个空格所在位置。请及时采纳!谢谢! @Anders_Zeus:  substring 方法用于提取字符串中介于两个指定下标之间的字符 substrin...

Centos7搭建日志服务器rsyslog+loganalyzer

、准备环境 更新时间 yum install ntp ntpdate systemctl start ntpd systemctl enable ntpd ntpdate ntp1.aliyun.com--------------------- 2.1 关闭防火墙: #systemctl stop firewalld2.2 将SELINUX设置为disab...

Nodejs与ES6系列1:变量声明

1、声明变量 在JS当中一个变量的作用域(scope)是程序中定义这个变量的区域。变量分为两类,全局(global)的和局部的。其中全局变量的作用域是全局性的,即在JavaScript代码中,它处处都有定义。而在函数之内声明的变量,就只在函数体内部有定义。它们是局部变量,作用域是局部性的。函数的参数也是局部变量,它们只在函数体内部有定义。 1.1 var变...

Kerberos 简单安装配置

Kerberos 简单安装配置 标签(空格分隔): Kerberos 一,Kerberos简史 Kerberos是一种网络安全认证协议,最早由麻省理工研发,用来保护项目 Athena提供的网络服务器。这个协议以希腊神话中的人物Kerberos(或者Cerberus)命名,他在希腊神话中是Hades的一条凶猛的三头保卫神犬。 kerberos Intern...