MVC及MVC Core在filter中如何獲取控制器名稱和Action名稱


很多時候我們需要使用過濾器來實現一些攔截、驗證等行為,此時我們能獲取到的Context是ActionExecutingContext ,我們如何通過這個Context來獲得Action、Controller等對象呢?記錄下:

在代碼中

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class ViewLogAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);
    }
}

更加簡潔的辦法:

var areaName = filterContext.ActionDescriptor.RouteValues["area"];

var controllerName = filterContext.ActionDescriptor.RouteValues["controller"];

var actionName = filterContext.ActionDescriptor.RouteValuse["action"];

1.獲取控制器名稱代碼 

MVC中

var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;

MVC Core中需強行轉下

var controllerName = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)filterContext.ActionDescriptor).ControllerName;

或者使用

filterContext.Controller.GetType().Name

MVC中還可以

var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"];

2.獲取Action名稱代碼

var actionName = filterContext.ActionDescriptor.ActionName;

 或

var actionName = HttpContext.Current.Request.RequestContext.RouteData.Values["Action"];

 3.獲取Action參數名稱

//獲取參數數組
var arrParameter = filterContext.ActionDescriptor.GetParameters();
//根據索引獲取對應參數名
var paramName = arrParameter[0].ParameterName;

4.獲取參數值

var parameterValue = filterContext.Controller.ValueProvider.GetValue(paramName).RawValue;

如果可以確定參數名稱可以直接用ActionParameters通過Key來獲取,Key指參數名稱

var parameterValue = filterContext.ActionParameters["KeyName"];


免責聲明!

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



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