10

我有一个 HttpModule 并且需要知道正在执行哪个操作。而我需要从方法中获取MethodInfo,动作名还不够,我需要从类型中获取真正的方法。

我知道如何获取控制器和操作:

string controllerName = ...RouteData.Values["controller"].ToString();
string actionName = ...RouteData.Values["action"].ToString();

我想要做:
controllerType.GetMethod(actionName)

这当然会导致 AmbiguousMatchException ...

哪个签名正在执行?有可能知道吗?

4

1 回答 1

0

这应该有效。它循环遍历路由数据并获取所有不为人所知的路由数据,即控制器、动作和区域。这是假设您使用的是默认路由。路由的每个其他部分,无论是在 URL 中还是在查询字符串中,都将映射到方法参数。您可以获取这些路由值的类型并使用它们来获取指定的方法信息。

List<Type> methodParams = new List<Type>();
string action = HttpContext.Current.Request.RequestContext.RouteData["action"];
foreach (var data in HttpContext.Current.Request.RequestContext.RouteData.Values)
{
    if ((data.Key != "action") && (data.Key != "controller") && (data.Key != "area"))
        methodParams.Add(data.Value.GetType());                
}

Type t; //assume this is your type that implements the action method you're interested in.  
        //I'm assuming you know it somehow

MethodInfo info = t.GetMethod(action, methodParams.ToArray());
于 2013-04-15T19:06:25.317 回答