我发现以下代码可以从控制器名称中获取所有操作。
Type t = typeof(YourControllerType);
MethodInfo[] mi = t.GetMethods();
foreach (MethodInfo m in mi)
{
if (m.IsPublic)
if (typeof(ActionResult).IsAssignableFrom(m.ReturnParameter.ParameterType))
methods = m.Name + Environment.NewLine + methods;
}
我想通过传递控制器名称使以下代码动态作为函数,如下所示:
public string get_all_action(type ob)
{
string methods = "";
Type t = typeof(ob);
MethodInfo[] mi = t.GetMethods();
foreach (MethodInfo m in mi)
{
if (m.IsPublic)
if (typeof(ActionResult).IsAssignableFrom(m.ReturnParameter.ParameterType))
methods = m.Name + Environment.NewLine + methods;
}
return methods;
}
但是我很困惑在定义和调用函数时应该将什么类型的参数传递给函数。我有以下代码来获取所有控制器并将控制器名称传递给 get_all_action()。
var asm = Assembly.GetExecutingAssembly();
var controllerTypes = from d in asm.GetExportedTypes() where typeof(IController).IsAssignableFrom(d) select d;
foreach(var val in controllerTypes)
{
string actionname = get_all_action(val.Name);
}
在这里, val.Name 是字符串类型,因此它会引发异常:
Object reference not set to an instance of an object.