ASP.NET MVC 控制器命名多元化

Posted

技术标签:

【中文标题】ASP.NET MVC 控制器命名多元化【英文标题】:ASP.NET MVC Controller Naming Pluralization 【发布时间】:2012-09-09 17:11:54 【问题描述】:

RESTful 约定表示在单数对象上使用复数名词。

命名 ASP.NET MVC 控制器的复数约定是什么,即ProductControllerProductsController

【问题讨论】:

从 ASP.net 上的 MVC 教程附带的默认值来看,我认为它们不应该是复数形式。 例如,默认的 ASP.NET Web API 混合了单数(HomeController、AccountController)和复数名称(ValuesController)。 【参考方案1】:

我将不得不不同意之前使用复数或单数并保持一致的答案。每个控制器都应该根据它们是与单个实体还是多个实体交互来使用不同的约定。尤其是在 URL 中默认使用控制器名称。

虽然项目模板使用单数(HomeController、AccountController),但只有一个 Home,并且 Account 操作仅在会话的单个帐户上运行。我不希望 /homes 的 URL 访问主页,也不希望转到 /accounts 来管理我的帐户设置。

复数 HomesController适用于具有与列出和搜索多个房屋相关的方法的房地产网站:/homes/new-listings。

【讨论】:

同意 - 例如,如果您设计像 /api/users(所有用户)和 /api/users/userId(单个用户)这样的路线,UsersController 是有意义的 /api/user/userId 不会有同样的意义,您可能会争辩说,即使在处理多个用户的情况下,您的控制器也会反映实体类型,因此 HomeController 会处理Home 类型的实体,因此是 /Home/homeId/Home/All-Homes/ 我同意这个解释。【参考方案2】:

一些 MVC 框架使用复数,但是 MVC 项目模板包含一个名为 AccountController 的控制器,因此建议使用单数命名。

没关系。与 Asp.net MVC 框架中的大多数内容一样,选择权在您手中。没有真正的约定。

这是我的个人意见,但重要的是你选择一个方案并保持一致!

【讨论】:

为强调一致性而竖起大拇指。 我想说的是,这是正确的答案:***.com/a/31968960/2013803(它有更多的投票但没有标记为“答案)。AccountController 是当前用户的帐户; 使用复数会很奇怪,除非它用于在管理仪表板中管理多个用户;但这是一个不同的用例,应该(恕我直言)是不同的控制器。而且 HomeController 也只有一个 Home。所以.. . 不,一致性应该是关于理解控制器的作用并基于此给它一个适当的名称。【参考方案3】:

当您使用 MVC 脚手架为 Entity Framework 实体添加控制器时,VS2013 将控制器名称设为复数,因此我建议使用使实体的控制器复数的默认值。

更新:我改变了主意。大声是正确的。这取决于控制器的上下文。

【讨论】:

以上是关于ASP.NET MVC 控制器命名多元化的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 控制器 - 单数或复数,是不是重要

asp.net MVC 控制器传实体类给指定页面

ASP.NET MVC 表单提交多层子级实体集合数据到控制器中

ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

ASP.NET + MVC5 入门完整教程三 (上) ---第一个MVC项目

ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)