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的值。
分类:
ASP.NET Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架