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日

相关文章

  • Unity报错InvalidOperationException: out of sync的解决

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

    C# 2023年5月14日
    00
  • 通过 C#/VB.NET 代码将 Excel 工作表拆分为单独的文件

    首先对于 “通过 C#/VB.NET 代码将 Excel 工作表拆分为单独的文件” 这个问题,我们可以采用以下步骤: 第一步:打开 Excel 文件 使用 C#/VB.NET 代码操作 Excel 需要安装 Microsoft Office 的相关库文件,一般可以通过 NuGet 安装。在打开 Excel 文件之前,需要先声明引用 Microsoft.Off…

    C# 2023年5月31日
    00
  • C#利用后缀表达式解析计算字符串公式

    关于C#利用后缀表达式解析计算字符串公式,我们可以按照以下步骤来实现: 第一步:将中缀表达式转换为后缀表达式 将中缀表达式转换为后缀表达式有许多种算法,这里我们介绍一种简单的算法: 新建一个栈和一个列表; 从左到右遍历中缀表达式的每一个元素,每次处理一个元素; 如果该元素是数字,将其加入列表; 如果该元素是运算符,将其压入栈中,先判断栈顶元素的运算符与其优先…

    C# 2023年6月7日
    00
  • 基于动态修改App.Config与web.Config的使用详解

    基于动态修改App.Config与web.Config的使用详解 在.NET应用程序中,App.Config和web.Config文件通常用于存储应用程序的配置信息。这些文件可以包含应用程序的各种设置,例如数据库连接字符串、日志级别、缓存大小等。在运行时,我们可以动态修改这些配置文件,以便在不重启应用程序的情况下更改应用程序的行为。本文将介绍如何使用C#动态…

    C# 2023年5月15日
    00
  • asp.net core服务限制堆内存大小的操作方法

    以下是“ASP.NET Core服务限制堆内存大小的操作方法”的完整攻略: 什么是ASP.NET Core服务限制堆内存大小 .NET Core服务限制堆内存大小是一种机制,允许您限制ASP.NET Core应用程序使用的堆内存大小。这种机制可以帮助您优化应用程序的性能,并避免内存泄漏。 ASP.NET Core服务限制堆内存大小的操作方法 ASP.NET …

    C# 2023年5月12日
    00
  • C# Random.Next()方法: 返回一个随机数

    C#中Random.Next()方法的作用与使用方法 C#中的Random.Next()方法可以生成随机数。它可以根据指定的范围产生一个随机数,可以是整型、浮点型,甚至可以是字符型。该方法不仅可以用于游戏开发,还可以用于模拟实验、密码生成、随机测试等领域。下面将详细介绍该方法的用法和参数。 Random.Next()方法的用法 Random.Next()方法…

    C# 2023年4月19日
    00
  • C#解决SQlite并发异常问题的方法(使用读写锁)

    让我来详细讲解“C#解决SQlite并发异常问题的方法(使用读写锁)”的完整攻略。 什么是SQlite并发异常问题 SQlite是一个非常流行的轻量级数据库,但由于其特殊的设计,使得它在并发访问时容易引发异常问题。例如,如果多个线程同时进行写操作,很容易引发数据被覆盖的情况,从而导致数据的不一致。 解决SQlite并发异常问题的方法 为了解决这个问题,我们可…

    C# 2023年5月31日
    00
  • c#判断数据库服务器是否已经启动的方法

    关于“c#判断数据库服务器是否已经启动的方法”,下面是完整的攻略: 1. 方法概述 在C#中,可以通过Ping类判断数据库服务器是否已经启动。Ping类是通过发送 Internet 控制消息协议 (ICMP) Echo 请求和接收 ICMP Echo 回应报文来测试连接的,可以用来测试远程主机是否可达。 2. 方法实现 在此提供一种实现思路:在C#中通过使用…

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