控制器名称是否来自类名?

时间:2011-07-20 18:24:38

标签: asp.net-mvc controller routes naming-conventions classname

这是一个新手问题......

我正在查看默认的asp.net mvc3项目,并注意到有一个名为:

的控制器
public class AccountController : Controller

我查看了整个代码,找不到指定AccountController映射到/ Account /的URL的地方。

我发现您可以使用routes.MapRoute(..)中的Global.asax更改路由,但我仍然不知道他们指定AccountController在哪里映射到/ Account /。

如果从类名中假设它,那么这是否意味着所有控制器类都必须命名为xxxxxController?

3 个答案:

答案 0 :(得分:7)

是的,你是对的,所有控制器都需要遵循结尾"Controller"的命名约定。

请参阅CodePlex上ASP.NET MVC代码中的ControllerName属性:

public virtual string ControllerName {
    get {
        string typeName = ControllerType.Name;
        if (typeName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
        {
            return typeName.Substring(0, typeName.Length - "Controller".Length);
        }
        return typeName;
    }
}

无论如何,您可以使用自己的控制器工厂来更改命名约定。

希望有所帮助。

答案 1 :(得分:6)

是的,这是MVC框架的一个关键方面,称为CoC,Convention over Configuration。我们的想法是,只要您愿意遵循类名,方法名,文件夹结构等内容的默认约定,就可以最大限度地减少工作所需的工作量。如果你想偏离那些你当然可以做的约定,你只会努力。

MVC框架中有许多这样的项目。除了所有控制器都是名为XxxxController的类的约定之外,还有一个约定,即所有视图都可以在名为View \ Xxxx \ Yyyyy.cshtml的文件夹中找到。

答案 2 :(得分:0)

是的,除非您实施自己的控制器工厂。