【问题标题】:Get the controller and action name in Controller method with Route attribute使用Route属性在Controller方法中获取控制器和动作名称
【发布时间】:2017-01-20 04:30:01
【问题描述】:

我在控制器中定义了一个路由,

[Route("AboutUs/Profile")]
[Route("AboutUs/Organization")]
public ActionResult Contents()
{
    string _controller = RouteData.Route.GetRouteData(this.HttpContext).Values["controller"].ToString();
    string _action = RouteData.Route.GetRouteData(this.HttpContext).Values["action"].ToString(); 
}

但是_action == "Contents",我怎样才能得到_action = "Profile"

我试过了:

string _controller = this.ControllerContext.RouteData.Values["controller"].ToString();
string _action = this.ControllerContext.RouteData.Values["action"].ToString();

还有这个

string _controller = this.RouteData.Values["controller"].ToString();
string _action = this.RouteData.Values["_action"].ToString();

但所有这些都不起作用。

【问题讨论】:

  • 你在控制器的什么地方使用这个?在点击Action 之前,您必须使用 HttpContext.Current。
  • 我用过HttpContext.Current,但是不行。
  • 检查HttpContext.Current.Request.RawUrl

标签: c# asp.net-mvc routes attributes


【解决方案1】:

我编写了这段代码来记录操作:

public class PreviousPage
{
    public string Action { get; set; }
    public string Controller { get; set; }
    public object Parameters { get; set; }

    public PreviousPage() { PP(); }
    public PreviousPage(string action, string controller, object parameters)
    {
        Action = action;
        Controller = controller;
        Parameters = parameters;
    }

    public void PP()
    {
        var htpc = HttpContext.Current.Request.RequestContext.RouteData.Values;

        object controller;
        htpc.TryGetValue("controller", out controller);
        Controller = controller as string;

        object action;
        htpc.TryGetValue("action", out action);
        Action = action as string;

        object id;
        htpc.TryGetValue("id", out id);
        int q = HttpContext.Current.Request.RawUrl.IndexOf('?');
        if (q>-1)
            Parameters = HttpContext.Current.Request.RawUrl.Substring(q+1);
        else
            Parameters = id as string;
    }
}

这是为了掩饰,但稍作修改你就会到达那里。

编辑:

通过静态函数获取动作:

    public static string GetAction()
    {
        object action=null;
        HttpContext.Current.Request.RequestContext.RouteData.Values.TryGetValue("action", out action);
        return  action as string;
    }

【讨论】:

  • 非常感谢回答,这个修改太大了解决不了,有没有其他方法可以直接获取Route Attribute中的action?
  • 你可以把它变成一个静态类。只需从您想要的任何地方调用它。
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 2014-03-15
  • 2013-09-03
相关资源
最近更新 更多