0
我發現了以下代碼來從控制器名稱中獲取所有動作。使動態返回控制器的所有動作
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.
我認爲這是足夠'get_all_action(val)'。 –
@Mario,謝謝 - 我的代碼過於防守了! (編輯更新) –
我認爲這將工作優秀=)很好的更新! –