ASP.NET MVC 中如何获取控制器的名称

本文发布于 5 年前,部分内容可能已经失去参考价值。

获取控制器(Controller)名称

控制器的 Action 中

RouteData.Values["controller"].ToString()


RouteData.Route.GetRouteData(HttpContext).Values["controller"].ToString()


视图中

ViewContext.RouteData.Values["controller"].ToString()


ViewContext.RouteData.Route.GetRouteData(Context).Values["controller"].ToString()


公共方法中

HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()


过滤器中

以 ActionFilterAttribute 为例,实现一个继承类,重写相关方法,在重写的方法中获取控制器名称

/// <summary>
/// 可用于检查用户是否已经登录(在 Action 之前执行)
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
    string controller = filterContext.RouteData.Values["controller"].ToString();
}


获取 Action 名称

将以上代码中的 "controller" 替换成 "action" 即可获取 Action 名称。

获取区域(Area)名称

控制器的 Actione 中

RouteData.DataTokens["area"]?.ToString()

注意:应使用空传播运算符

获取所有 Action 参数

RouteData.Values
可能相关的内容