【发布时间】:2011-02-11 01:23:01
【问题描述】:
在给定System.Web.Routing.RouteData 的情况下,如何获取将要调用的控制器操作(方法)和控制器类型?
我的场景是这样的 - 我希望能够在 OnActionExecuting 方法中执行某些操作(或不执行)。
然而,我经常想知道的不是当前动作,而是被调用的“根”动作;我的意思是我可能有一个名为“登录”的视图,这是我的登录页面。此视图可能包括
另一个局部视图“LeftNav”。当为 LeftNav 调用 OnActionExecuting 时,我希望能够确定它确实是为 Login 的“根”动作调用的。
我意识到通过调用RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext),我可以获得“root”请求的路由,但是如何将其变成
方法和类型信息?
到目前为止,我唯一的解决方案是:
var routeData = RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext)
var routeController = (string)routeData.Values["controller"];
var routeAction = (string)routeData.Values["action"];
这样做的问题是“routeController”是去掉了“Controller”后缀的控制器名称,并且不是完全限定的;即它是“登录”,而不是“MyCode.Website.LoginController”。
如果可能的话,我宁愿得到一个实际的 Type 和 MethodInfo,或者至少是一个完全限定的类型名称。
有什么想法或替代方法吗?
[编辑 - 这是 ASP.Net MVC 1.0]
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-mvc-routing