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

rkw*_*rkw 5 asp.net-mvc controller routes naming-conventions classname

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

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

public class AccountController : Controller
Run Code Online (Sandbox Code Playgroud)

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

我发现,您可以使用路由的改变routes.MapRoute(..)Global.asax,但我还是不知道他们指定的AccountController映射到/帐号/.

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

Mar*_*erl 7

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

ControllerName在CodePlex上的ASP.NET MVC代码中查看属性:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

希望有所帮助.


Mic*_*eld 6

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

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