控制器名称是从类名派生的吗?
Posted
技术标签:
【中文标题】控制器名称是从类名派生的吗?【英文标题】:Is the controller name derived from the class name? 【发布时间】:2011-10-09 15:27:38 【问题描述】:这是一个新手问题...
我在查看默认的 asp.net mvc3 项目,发现有一个控制器叫做:
public class AccountController : Controller
我查看了整个代码,找不到指定 AccountController 映射到 URL 的 /Account/ 的位置。
我发现您可以在Global.asax
中使用routes.MapRoute(..)
更改路由,但我仍然不知道他们指定AccountController 映射到/Account/ 的位置。
如果从类名中假设,那是否意味着所有控制器类都必须命名为 xxxxxController?
【问题讨论】:
【参考方案1】:是的,除非您实现自己的控制器工厂。
【讨论】:
【参考方案2】:是的,你是对的,所有控制器都需要遵循结尾 "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;
无论如何,您可以使用自己的控制器工厂来更改命名约定。
希望对您有所帮助。
【讨论】:
【参考方案3】:是的,这是称为 CoC 的 MVC 框架的一个关键方面,Convention over Configuration。这个想法是,只要你愿意遵循类名、方法名、文件夹结构等的默认约定,你就可以最大限度地减少工作所需的工作量。只有当你想偏离这些约定时,你才会付出努力,你当然可以做到。
MVC 框架中有许多这样的项目。除了所有控制器都是名为 XxxxController 的类的约定外,还有一个约定是所有视图都位于名为 View\Xxxx\Yyyyy.cshtml 的文件夹中。
【讨论】:
以上是关于控制器名称是从类名派生的吗?的主要内容,如果未能解决你的问题,请参考以下文章
将属性名称更改为在使用Json.net进行序列化时已实例化的派生类名称