0

我看了很多视频教程,阅读了更多文章。我不认为我见过一个回答这个问题的人,我被困住了。:S

我用 Web API 创建了一个 MVC4 应用程序。离开我读过的教程,我使用了标准的命名约定。例如,/api/user 和 /api/user/id 等。

现在我想为用户实体创建 CRUD 页面。当然,这些页面可以很好地放在 /Admin/ 文件夹下,但我无法创建一个控制器来生成 /Admin/User/Create、/Admin/User/View 等视图,因为这需要创建一个名为 UserController 的控制器 - 但它已经为 WebAPI 创建。

使用此文件夹结构为我的实体创建 CRUD 页面似乎不是标准的,或者至少是“好的”:

Views/Admin/User/
Views/Admin/Product/
etc, etc.

这允许每个实体/表拥有自己的文件夹,其中包含自己的 Create.cshtml、Index.cshtml 等。

但同样,我已经创建了一个具有这种结构的 WebAPI:

api/User/
api/Product/

所以,现在我想创建一些管理页面来管理数据库。当我使用实体框架创建具有读/写功能的 MVC 控制器时,我不知道该给控制器命名什么来给我想要的 URI 结构。

当然,我并不真正关心控制器叫什么,但我不知道获取 URI 结构需要哪些步骤。例如,我创建了一个 MVC 控制器并将其命名为 AdminProduct,但现在我必须转到 /AdminProduct/ 才能查看这些页面。

有人可以指点我吗?

4

1 回答 1

1

只要它们位于不同的命名空间中,您就可以拥有两个具有相同名称的控制器。例如,我System.Web.Http.ApiController在项目的 /Controllers/Api 文件夹下添加了所有类。默认情况下,Visual Studio 会将这些控制器包含在名为<ProjectName>.Controllers.Api. 然后,在 /Controllers 文件夹中,您可以在其中添加System.Web.Mvc.Controller类,它们将位于<ProjectName>.Controllers命名空间中。所以,长话短说,你可以有一个名为 UserController 的 MVC 控制器和一个名为 UserController 的 WebApi 控制器,并且没有冲突。

您的 MVC 控制器操作的视图,例如/User/Create并且/User/Delete应该放在/Views/User/项目的文件夹下 - 每个都与 UserController 中的操作具有相同的名称。至于拥有管理页面,为什么不对您想要保护的那些操作创建AdminController或使用操作过滤器?[Authorize]

我不确定我是否理解你的整个问题。ASP.NET MVC 通过这种约定将控制器名称和操作绑定到视图。

于 2013-10-10T05:59:22.737 回答