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的值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM