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,该方法有一个LoginRequest类型的参数,注意我们在Login上注册了我们后面会讲解的MyActionFilter拦截器:

public class HomeController : Controller
{
    [MyActionFilter]
    [HttpPost]
    public IActionResult Login([FromBody]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[parameterName] 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/p/17336910.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET Core MVC通过IActionFilter.OnActionExecuting方法,获取Controller的Action方法参数值 - Python技术站

(0)
上一篇 2023年4月24日
下一篇 2023年4月24日

相关文章

  • VBS ArrayList Class vbs中的数组类

    VBS ArrayList Class ArrayList是VBScript中的一个内置对象,可以用于方便地管理一个动态的大小的数组,通常用于存储、排序和搜索大量数据。 创建ArrayList对象 下面是如何创建一个空的ArrayList对象的示例: Dim list Set list = CreateObject("System.Collecti…

    C# 2023年6月8日
    00
  • .Net中的集合排序可以这么玩你知道吗

    当我们需要对一组数据进行排序时,集合排序是我们常用的手段之一。在 .Net 中,集合排序可以通过使用 Linq 的 OrderBy 和 OrderByDescending 方法来实现。 1. 升序排序 首先,我们需要定义一个包含一组数据的 List: List<int> numbers = new List<int> { 5, 3, …

    C# 2023年6月1日
    00
  • .NET Core实现企业微信消息推送

    企业微信是一种企业级即时通讯工具,它提供了消息推送功能。在.NET Core中,您可以使用企业微信API来实现消息推送。本攻略将深入探讨如何使用.NET Core实现企业微信消息推送,并提供两个示例说明。 实现企业微信消息推送 实现企业微信消息推送的步骤如下: 1. 注册企业微信 在使用企业微信API之前,您需要注册企业微信账号,并创建应用程序。您可以在企业…

    C# 2023年5月17日
    00
  • C#中分部类和分部方法的应用

    当我们在编写一个C#类时,该类通常会包含很多方法和属性。如果类的代码太长,它就可能会变得难以阅读和维护。为了解决这个问题,C#提供了一种将类和方法拆分成多个文件的方法。这就是分部类和分部方法的应用。 分部类 分部类指的是单个类定义在多个文件中。每个文件都包含类定义的一部分,而所有文件的内容被视为一个单独的完整类定义。在C#中,可以使用 partial 关键字…

    C# 2023年6月7日
    00
  • C#实现Zip压缩目录中所有文件的方法

    下面是C#实现压缩目录中所有文件的方法的完整攻略: 准备工作 在开始之前,需要引用System.IO.Compression和System.IO.Compression.FileSystem这两个命名空间。如果使用Visual Studio,则可以通过添加引用来完成。 在代码中,需要先声明这两个命名空间: using System.IO.Compressio…

    C# 2023年6月1日
    00
  • C#匿名方法与Delegate类型转换错误分析

    下面我来详细讲解一下C#匿名方法与Delegate类型转换错误分析的完整攻略。 什么是匿名方法 匿名方法是在C#2.0中新增的特性,它可以在运行时动态地创建一段匿名代码块。匿名方法可以作为方法参数,或赋值给一个委托类型的变量,以便在稍后时间执行。 匿名方法的语法如下: delegate(parameters) { /* 方法体 */ } 其中,delegat…

    C# 2023年5月15日
    00
  • Unity报错InvalidOperationException: out of sync的解决

    针对Unity报错InvalidOperationException:outofsync的解决,我们可以采取以下步骤: 步骤1:清理Unity资源和缓存 首先我们可以尝试清理Unity的资源和缓存,方法如下: 关闭Unity编辑器。 在项目文件夹下找到 Library 文件夹,将其删除。 重新启动Unity编辑器,等待它重新构建项目的 Library 文件夹…

    C# 2023年5月14日
    00
  • C#中的Linq To XML讲解

    Linq To XML是C#中的一个强大的XML数据处理方式,可以轻松地查询、修改、创建和导出XML文档。下面将详细讲解Linq To XML的使用方法。 1. Linq To XML的基础 1.1 创建XML文档 要使用Linq To XML处理XML文档,首先需要创建一个XDocument对象,这个对象代表一个XML文档。可以通过以下代码创建一个简单的X…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部