如何使用带有WebAPI的MVC4控制URI

时间:2013-10-10 05:40:40

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api

我观看了很多视频教程并阅读了更多文章。我不认为我已经看到一个回答这个问题但我被困住了。 :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 /来查看这些页面。

有人能指出我吗?

1 个答案:

答案 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通过此约定将控制器名称和操作绑定到视图。