MVC 获取控制器名称和Action名称(转载)
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。
MVC 获取控制器名称和Action名称(转载)的更多相关文章
- MVC在filter中如何获取控制器名称和Action名称
使用ActionExecutingContext对象可以获取控制器名称.Action名称.参数名称以及参数值.路由和Action返回值不影响结果. 在代码中 [AttributeUsage(Attri ...
- MVC及MVC Core在filter中如何获取控制器名称和Action名称
很多时候我们需要使用过滤器来实现一些拦截.验证等行为,此时我们能获取到的Context是ActionExecutingContext ,我们如何通过这个Context来获得Action.Control ...
- MVC在页面View上获取当前控制器名称、Action名称以及路由参数
有时候在封装MVC通用控件时需要在页面上获取这些数据. 用以下方法即可: //获取控制器名称: ViewContext.RouteData.Values["controller"] ...
- MVC3在页面上获取当前控制器名称、Action名称以及路由参数
获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.Ro ...
- ASP.NET MVC3在页面上获取当前控制器名称、Action名称以及路由参数
参考:http://ulfqbpl.blog.163.com/blog/static/87783552201272824843607/ 获取控制器名称: RouteData.Values[" ...
- asp.net mvc 在视图中获取控制器与动作的名称
获取 controller 名称: ViewContext.RouteData.Values["controller"].ToString(); 获取 action 名称: Vie ...
- ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)
ASP.NET MVC 一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [ ...
- ASP.NET MVC中将控制器分离到类库的实现
前言 在ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库, ...
- MVC扩展控制器工厂,通过实现IControllerFactory,根据action名称生成不同的Controller
关于控制器工厂的扩展,要么通过实现IControllerFactory接口,要么通过继承DefaultControllerFactory.本篇中,我想体验的是: 1.当请求经过路由,controlle ...
随机推荐
- hive、sqoop、MySQL间的数据传递
hdfs到MySQL csv/txt文件到hdfs MySQL到hdfs hive与hdfs的映射: drop table if exists emp;create table emp ( id i ...
- sql server常用字符串函数
--返回字符表达式中最左侧字符的ASCII代码值 --将整数ASCII代码转换为字符 )--a )--A ')--A SELECT CHAR('A')--在将 varchar 值 'A' 转换成数据类 ...
- 2019swpuj2ee作业一:C/S,B/S的应用的区别
1.硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, ...
- windows server防火墙添加例外的步骤
Windows Server 2012 防火墙如何添加端口例外的方法 在Windows Server 2012系统中,如果用户想在防火墙中开通一个端口,您可以按以下步骤执行: 1. 首先点击桌面左 ...
- Ubuntu 中 iptables 增删查改
iptables是linux系统自带的防火墙,功能强大.如果iptables不熟悉的话可以用apf,是一款基于iptables的防墙. 一.安装并启动防火墙 $ /etc/init.d/iptable ...
- Python logging模块简介
logging模块提供logger,handler,filter,formatter. logger:提供日志接口,供应用代码使用.logger最长用的操作有两类:配置和发送日志消息.可以通过logg ...
- Hadoop 综合揭秘——MapReduce 基础编程(介绍 Combine、Partitioner、WritableComparable、WritableComparator 使用方式)
前言 本文主要介绍 MapReduce 的原理及开发,讲解如何利用 Combine.Partitioner.WritableComparator等组件对数据进行排序筛选聚合分组的功能.由于文章是针对开 ...
- MySQL 基础--字符类型
##=====================================================================================## MySQL支持的字符 ...
- ESB结合门户Portlet实现数据分析
1 背景概述 笔者在公司做集成项目时,通常会涉及ESB与Portal结合实现图表数据分析功能.通过ESB获取数据库信息,然后在门户上采用Portlet接收ESB中的数据URL最后展现到门户上.本文为项 ...
- MLlib之NaiveBayes算法源码学习
package org.apache.spark.mllib.classification import breeze.linalg.{DenseMatrix => BDM, DenseVect ...