MVC在filter中如何获取控制器名称和Action名称

 

使用ActionExecutingContext对象可以获取控制器名称、Action名称、参数名称以及参数值。路由和Action返回值不影响结果。

在代码中

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

1.获取控制器名称代码

 var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;

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"];

来源:https://www.cnblogs.com/paulhe/p/4138187.html

二、两种方法使用案例

重写过滤器AuthorizeAttribute时,AuthorizeCore中怎么获取controller,action的名字

protected override bool AuthorizeCore(HttpContextBase httpContext)
{

string controller = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
     string action = httpContext.Request.RequestContext.RouteData.Values["action"].ToString();

}

public override void OnAuthorization(AuthorizationContext filterContext)
{

  //此中会调用 AuthorizeCore方法。
  base.OnAuthorization(filterContext);

   //获取请求中的控制器和方法名称。
   string contorllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
   string actionName = filterContext.ActionDescriptor.ActionName;

  //如果在后面则上面代码先执行。
  //base.OnAuthorization(filterContext);
}

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
      base.HandleUnauthorizedRequest(filterContext);

}

代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走HandleUnauthorizedRequest 方法,并且Request.StausCode会返回401,401错误又对应了Web.config中 的 <authentication mode="Forms

注意:如果 base.OnAuthorization(filterContext);放在后面,则OnAuthorization(先执行位于base.OnAuthorization(filterContext);上方的代码)->AuthorizeCore。

最新文章

  1. RVA与Offset的换算函数
  2. robolectric环境的搭建
  3. 【运维手记】virtualbox中centOS安装增强功能
  4. D3D游戏编程系列(六):自己动手编写第一人称射击游戏之第一人称视角的构建
  5. Storm系列(十六)架构分析之Executor-Bolt
  6. 【转】飞凌嵌入式(Forlinx)TE/OK6410内核编译:“make: arm-none-linux-gnueabi-gcc:命令未找到”
  7. 77个常用Linux命令和工具
  8. JOSN反串行化
  9. 不要使用Resource Owner Password Credentials
  10. js函数前面的+,!
  11. docker 进阶
  12. java.lang.NoSuchMethodError: org.springframework.util.StreamUtils.emptyInput()Ljava/io/InputStream;
  13. Rust2018
  14. mysql 数据库的备份与还原 at winows
  15. python添加到环境变量
  16. poj 2059 单调栈
  17. docker 搭建Mysql集群
  18. Why we should overwrite the hashCode() when we overwrite the equals()
  19. redis 发布/订阅 模式
  20. img图片自适应宽和高[转]

热门文章

  1. 综合数据api接口使用
  2. (PMP)第13章-----项目相关方管理
  3. leetcode(java)
  4. MySQL八、备份和还原
  5. 20155326刘美岑《网络对抗》Exp5 MSF基础应用
  6. pwm互补输出 死区设置
  7. Flask 中的路由系统
  8. 简单的基于矩阵分解的推荐算法-PMF, NMF
  9. [wxgl] load image fail
  10. MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause