5

这是一个新手问题...

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

public class AccountController : Controller

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

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

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

4

3 回答 3

7

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

请参阅ControllerNameCodePlex 上 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;
    }
}

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

希望有帮助。

于 2011-07-20T18:32:43.643 回答
6

是的,这是 MVC 框架的一个关键方面,称为 CoC,约定优于配置。这个想法是,只要你愿意遵循类名、方法名、文件夹结构等的默认约定,你就可以最大限度地减少工作所需的工作量。只有当你想偏离这些约定时,你才会付出努力,你当然可以做到。

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

于 2011-07-20T19:04:20.967 回答
0

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

于 2011-07-20T18:31:25.317 回答