ASP.NET Core MVC通过IActionFilter.OnActionExecuting方法,获取Controller的Action方法参数值

yizhihongxing

用过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日

相关文章

  • C#简单的加密类实例

    C#简单的加密类实例攻略 1. 概述 加密是一种常见的安全机制,常用于保护敏感数据的隐私。C#语言提供了多种加密算法,例如DES、AES、RSA等。本攻略将详细讲解如何创建一个简单的加密类,以及如何使用该类对字符串进行加密和解密操作。 2. 创建加密类 首先,我们需要创建一个加密类来实现加密和解密操作。以下是一个基本的加密类: using System; u…

    C# 2023年6月1日
    00
  • C#根据身份证号码判断出生日期和性别

    C# 根据身份证号码判断出生日期和性别 步骤1:获取身份证号码的输入 在 C# 中,我们可以通过 Console.ReadLine() 方法获取用户输入的身份证号码。示例代码如下: Console.WriteLine("请输入身份证号码:"); string idCard = Console.ReadLine(); 步骤2:校验身份证号码…

    C# 2023年6月1日
    00
  • c#中单例类与静态类的区别以及使用场景

    C#中单例类与静态类都是常用的设计模式,但是在使用时需要注意它们之间的区别和适用场景。下面将分别对单例类与静态类进行详细讲解。 单例类 单例类是一种只能实例化一个对象的类,通过保证在程序中只有一个实例对象来实现类的控制。单例类通常都由一个私有构造函数、一个静态变量和一个静态工厂方法组成。 单例类主要适用于以下场景: 系统中需要限制对象的数量,并且只需要有一个…

    C# 2023年6月7日
    00
  • C#实现获取Excel中图片所在坐标位置

    获取Excel中图片所在坐标位置主要涉及到读取Excel文件、解析Excel文件和处理Excel文件中的图片等技术。下面是一些概述步骤: 步骤一:引入所需的依赖项 引入 Microsoft.Office.Interop.Excel 库,该库可用于操作Excel。 引入 System.Drawing 库,该库可用于处理图像。 步骤二:读取Excel文件 使用 …

    C# 2023年6月7日
    00
  • C# Diagnostics.Debug.WriteLine()方法: 将信息写入调试输出窗口

    C#中 Diagnostics.Debug.WriteLine() 的作用与使用方法 Diagnostics.Debug.WriteLine() 是一个用于输出调试信息的方法,可以在调试过程中将一些信息输出到控制台或者调试器中供开发者查看。 具体的说,Diagnostics.Debug.WriteLine() 方法会将输入的信息写入到调试器的输出窗口中,可以…

    C# 2023年4月19日
    00
  • C#快速实现拖放操作

    下面是关于“C#快速实现拖放操作”的完整攻略。 什么是拖放操作 拖放操作是指在界面中,将某个物体从一个位置拖到另一个位置的操作。在 Web 应用程序或桌面应用程序中,拖放操作是常用的一种操作方式。 C# 快速实现拖放操作的步骤 在C#中,实现拖放操作的步骤如下: 步骤一:设置允许接受拖放操作的控件 在要接受拖放操作的控件中,设置 AllowDrop 属性为 …

    C# 2023年6月1日
    00
  • C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

    序列化是将对象转换为一种格式,以便在需要时可以将其反序列化为原始对象。C#中使用以下三种方式进行序列化和反序列化: BinaryFormatter类:将对象序列化为二进制格式,是.NET中最常用的序列化方式,可以将序列化后的数据存储到磁盘、内存或网络中。 XmlSerializer类:将对象序列化为XML格式,适合在不同平台间传输数据。 ISerializa…

    C# 2023年5月31日
    00
  • C#中常量和只读变量的区别小结

    下面是详细的讲解“C#中常量和只读变量的区别小结”的完整攻略: 常量和只读变量的区别 在C#中,常量和只读变量都用来表示一些固定不变的值,但它们之间有明显的区别。 常量 常量在定义后就无法再次被修改。常量的值必须在编译时确定。常量使用const关键字来定义,如下所示: const int MaxValue = 100; 常量的名称必须以大写字母开头。在使用常…

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