对于我们的web应用程序,我需要保存获取和显示项的顺序取决于视图-或者准确地说-生成视图的控制器和操作(当然还有用户id,但这不是这里的重点)。

而不是仅仅在每个控制器动作中给自己一个标识符(为了将它用于一些依赖于视图的DB输出排序),我认为从控制器和它被调用的动作方法中自动创建这个标识符会更安全更容易。

如何从控制器中的动作方法中获得控制器和动作的名称?还是说我需要反思一下?


当前回答

试试这段代码

将这个重写方法添加到控制器

protected override void OnActionExecuting(ActionExecutingContext actionExecutingContext)
{
   var actionName = actionExecutingContext.ActionDescriptor.ActionName;
   var controllerName = actionExecutingContext.ActionDescriptor.ControllerDescriptor.ControllerName;
   base.OnActionExecuting(actionExecutingContext);
}

其他回答

为什么不做一些简单的事情呢?

只需调用请求。路径,它将返回一个以/分隔的字符串

然后你可以使用. split('/')[1]来获取控制器名称。

 @this.ViewContext.RouteData.Values["controller"].ToString();

下面是取名字最简单、最实用的方法:

var actionName = RouteData.Values["action"];
var controllerName = RouteData.Values["controller"];

Or

string actionName = RouteData.Values["action"].ToString();
string controllerName = RouteData.Values["controller"].ToString();

上面的代码使用asp.net mvc 5进行测试。

试试这段代码

将这个重写方法添加到控制器

protected override void OnActionExecuting(ActionExecutingContext actionExecutingContext)
{
   var actionName = actionExecutingContext.ActionDescriptor.ActionName;
   var controllerName = actionExecutingContext.ActionDescriptor.ControllerDescriptor.ControllerName;
   base.OnActionExecuting(actionExecutingContext);
}

这是我目前所拥有的:

var actionName = filterContext.ActionDescriptor.ActionName;
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;