我有一个HttpModule,需要知道正在执行哪个动作。我需要从方法中获取MethodInfo,动作名称不够,我需要从类型中获取真实的方法。
我知道如何获得控制器和动作:
string controllerName = ...RouteData.Values["controller"].ToString();
string actionName = ...RouteData.Values["action"].ToString();
我想这样做:
controllerType.GetMethod(actionName)
这当然会导致AmbiguousMatchException ...
正在执行哪个签名?有可能知道吗?
答案 0 :(得分: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());