当我更改控制器类的访问修饰符时,会导致错误。如果我将操作方法的可访问性设置为非公共,那么它也会导致错误(特别是页面未找到错误)。为什么会这样?
答案 0 :(得分:5)
默认情况下,如果您没有为某个类指定任何访问修饰符,则它将默认为C#中的internal
。只有同一程序集中的代码才能访问internal
的类。因此,如果您的控制器是internal
,则在收到请求时创建控制器实例的代码必须在您的程序集中。
但是System.Web.Mvc
程序集中存在控制器创建代码,默认情况下DefaultControllerFactory
负责创建控制器。如果你的代码存在于例如MvcApplication1程序集中,那么DefaultControllerFActory在没有公共访问修饰符的情况下找不到你的控制器类,因此它无法实例化它们。
如果你想构建一个紧密耦合的ASP.NET MVC应用程序(它不是为它设计的),那么从理论上讲你可以按照这种方式进行。