如何在控制器中使用私有操作方法?当我使用私人方法时,它是无法访问的。它会因“未找到资源”而引发错误。
private ActionResult Index()
{
return View();
}
答案 0 :(得分:7)
您可以使用私人/受保护ActionResult
在公共行动之间共享逻辑。
private ActionResult SharedActionLogic( int foo ){
return new EmptyResult();
}
public ActionResult PublicAction1(){
return SharedActionLogic( 1 );
}
public ActionResult PublicAction2(){
return SharedActionLogic( 2 );
}
但是框架只会调用公共操作方法(参见下面的源代码)。这是设计的。
来自System.Web.Mvc中的内部类ActionMethodSelector:
private void PopulateLookupTables()
{
// find potential matches from public, instance methods
MethodInfo[] allMethods = ControllerType.GetMethods(BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public);
// refine further if needed
MethodInfo[] actionMethods = Array.FindAll(allMethods, IsValidActionMethod);
// remainder of method omitted
}
在控制器中使用非公共代码是很常见的,并且自动路由所有方法都会违反预期行为并增加攻击足迹。