我观看了很多视频教程并阅读了更多文章。我不认为我已经看到一个回答这个问题但我被困住了。 :S
我使用Web API创建了一个MVC4应用程序。关于我读过的教程,我选择了一个标准的命名约定。例如,/ api / user和/ api / user / id等。
现在我想为User实体创建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/
所以,现在我想创建一些管理页面来管理数据库。当我使用Entity Framework创建一个带读/写的MVC控制器时,我无法弄清楚控制器的名称,以便为我提供我想要的URI结构。
当然,我并不关心控制器的调用,但我不知道获取URI结构需要哪些步骤。例如,我创建了一个MVC控制器并将其命名为AdminProduct,但现在我必须转到/ AdminProduct /来查看这些页面。
有人能指出我吗?
答案 0 :(得分:1)
只要两个控制器位于不同的命名空间中,就可以拥有两个具有相同名称的控制器。例如,我在项目的/ Controllers / Api文件夹下添加了所有System.Web.Http.ApiController
类。默认情况下,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通过此约定将控制器名称和操作绑定到视图。