Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在具有路由属性的控制器方法中获取控制器和操作名称_C#_Asp.net Mvc_Routes_Attributes - Fatal编程技术网

C# 在具有路由属性的控制器方法中获取控制器和操作名称

C# 在具有路由属性的控制器方法中获取控制器和操作名称,c#,asp.net-mvc,routes,attributes,C#,Asp.net Mvc,Routes,Attributes,我在控制器中定义了一个路由 [Route("AboutUs/Profile")] [Route("AboutUs/Organization")] public ActionResult Contents() { string _controller = RouteData.Route.GetRouteData(this.HttpContext).Values["controller"].ToString(); string _action = RouteData.Route.Ge

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

[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(); 
}
但是
\u action==“Contents”
,如何获取
\u 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();

但所有这些都不起作用。

我编写了以下代码来记录操作:

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;
    }

您在控制器中的何处使用此功能?在点击
操作之前,您必须使用HttpContext.Current。我使用了HttpContext.Current,但不起作用。检查
HttpContext.Current.Request.RawUrl
非常感谢您的回答,这个修改对于解决方案来说太大了,没有其他方法可以直接在Route属性中获取操作吗?您可以将其设置为静态类。只要你想从哪里打电话就可以了。