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属性中获取操作吗?您可以将其设置为静态类。只要你想从哪里打电话就可以了。