如何在.net mvc中使用私有操作方法?

时间:2014-09-10 06:26:43

标签: asp.net-mvc

如何在控制器中使用私有操作方法?当我使用私人方法时,它是无法访问的。它会因“未找到资源”而引发错误。

private ActionResult Index()
                {
                    return View();
                }

1 个答案:

答案 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
}

在控制器中使用非公共代码是很常见的,并且自动路由所有方法都会违反预期行为并增加攻击足迹。