使用Route属性在Controller方法中获取控制器和动作名称
Posted
技术标签:
【中文标题】使用Route属性在Controller方法中获取控制器和动作名称【英文标题】:Get the controller and action name in Controller method with Route attribute 【发布时间】: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
【参考方案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? 你可以把它变成一个静态类。只需从您想要的任何地方调用它。以上是关于使用Route属性在Controller方法中获取控制器和动作名称的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4 - Route::resource 与 Route::controller。使用哪个?
在 laravel 5.4 中将变量从 Route 传递到 Controller 的最简单方法是啥?