果诞 发表于 2023-4-20 17:07:20

ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Contr

用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器。最近才发现IActionFilter的OnActionExecuting方法,甚至可以获取Controller的Action方法参数值。
假如我们在ASP.NET Core MVC项目中有一个HomeController,其中有一个Action方法叫Login,该方法有一个LoginRequest类型的参数,注意我们在Login上注册了我们后面会讲解的MyActionFilter拦截器:
public class HomeController : Controller
{
   
   
    public IActionResult Login(LoginRequestloginLogoutRequest)
    {
      return View();
    }
}其参数LoginRequest类的定义如下:
public class LoginRequest
{
    public string Username { get; set; }
    public string Password { get; set; }

}那么我们可以定义一个IActionFilter拦截器叫MyActionFilter,在其OnActionExecuting方法中,来获取HomeController中Action方法Login的参数LoginRequest:
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方法是否有类型为LoginRequest的参数
            if (parameterType == typeof(LoginRequest))
            {
                //如果有,那么就获取LoginRequest类型参数的值
                var LoginRequest= context.ActionArguments as LoginRequest;

                var username = LoginRequest.Username;
                var password = LoginRequest.Password;
            }
      }
    }

    /// <summary>
    /// OnActionExecuted方法在Controller的Action执行后执行
    /// </summary>
    public void OnActionExecuted(ActionExecutedContext context)
    {
      //TODO
    }
}可以看到在IActionFilter的OnActionExecuting方法中,通过很简单的代码,我们就可以获取到Login方法参数LoginRequest的值。

来源:https://www.cnblogs.com/l-monstar/archive/2023/04/20/17336910.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Contr