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

打印 上一主题 下一主题

主题 922|帖子 922|积分 2766

用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器。最近才发现IActionFilter的OnActionExecuting方法,甚至可以获取Controller的Action方法参数值。
假如我们在ASP.NET Core MVC项目中有一个HomeController,其中有一个Action方法叫Login,该方法有一个LoginLogoutRequest类型的参数,注意我们在Login上注册了我们后面会讲解的MyActionFilter拦截器:
  1. public class HomeController : Controller
  2. {
  3.     [MyActionFilter]
  4.     [HttpPost]
  5.     public IActionResult Login([FromBody]LoginLogoutRequest loginLogoutRequest)
  6.     {
  7.         return View();
  8.     }
  9. }
复制代码
其参数LoginLogoutRequest类的定义如下:
  1. public class LoginLogoutRequest
  2. {
  3.     public string Username { get; set; }
  4.     public string Password { get; set; }
  5. }
复制代码
那么我们可以定义一个IActionFilter拦截器叫MyActionFilter,在其OnActionExecuting方法中,来获取HomeController中Action方法Login的参数LoginLogoutRequest:
  1. public class MyActionFilterAttribute : Attribute, IActionFilter
  2. {
  3.     /// <summary>
  4.     /// OnActionExecuting方法在Controller的Action执行前执行
  5.     /// </summary>
  6.     public void OnActionExecuting(ActionExecutingContext context)
  7.     {
  8.         //循环获取在Controller的Action方法中定义的参数
  9.         foreach (var parameter in context.ActionDescriptor.Parameters)
  10.         {
  11.             var parameterName = parameter.Name;//获取Action方法中参数的名字
  12.             var parameterType = parameter.ParameterType;//获取Action方法中参数的类型
  13.             //判断该Controller的Action方法是否有类型为LoginLogoutRequest的参数
  14.             if (parameterType == typeof(LoginLogoutRequest))
  15.             {
  16.                 //如果有,那么就获取LoginLogoutRequest类型参数的值
  17.                 var loginLogoutRequest = context.ActionArguments[parameterName] as LoginLogoutRequest;
  18.                 var username = loginLogoutRequest.Username;
  19.                 var password = loginLogoutRequest.Password;
  20.             }
  21.         }
  22.     }
  23.     /// <summary>
  24.     /// OnActionExecuted方法在Controller的Action执行后执行
  25.     /// </summary>
  26.     public void OnActionExecuted(ActionExecutedContext context)
  27.     {
  28.         //TODO
  29.     }
  30. }
复制代码
可以看到在IActionFilter的OnActionExecuting方法中,通过很简单的代码,我们就可以获取到Login方法参数LoginLogoutRequest的值。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表