2012-07-19 75 views
16

我刚刚开始使用VS 2012 RC,并且创建了一个ASP.NET MVC 4 Web应用程序,我计划提供基于HTML的用户界面和基于WebApi的编程界面。我可以同时拥有Controller和ApiController吗?

对于我的HTML网站,我有一个控制器和每个模型(MVC!)的视图,并且路由按照惯例工作,例如,URL /client连接到我的ClientController。我的ClientController派生自Controller

对于我的API,我将创建一个从ApiController派生出新的控制器。我自然希望我的API网址与我的HTML网址相似,因此我希望客户信息在/api/client处可用。但是,通过约定路由,这将暗示我需要一个名为ClientController的ApiController。我已经有一个ClientController类。

我该如何处理?我需要自定义路由吗?我是否将API类放在不同的命名空间中,以便我可以给它们命名?

更新:这个问题似乎表明,我的API控制器不同的命名空间是我所需要的:Mix web api controllers and site controllers

+0

你看着[MVC区(http://msdn.microsoft.com/en-us/library/ee671793.aspx)? – gordonmleigh 2012-07-19 16:51:52

+0

@gordonml:谢谢 - 我刚刚做了,它似乎是sotra,挺有用的。然而,我不禁感到,我需要实现的目标有点夸张。 – 2012-07-20 09:03:36

+0

IsAjaxRequest是否适合您的需求? http://stackoverflow.com/questions/1681563/detecting-isajaxrequest-with-asp-net-mvc-and-jquery-form-plugin-file-upload – kenny 2012-07-22 14:04:40

回答

12

它所需要的是控制器类在不同的命名空间,一切都很好。

使用MVC领域也将工作(如gordonml的评论建议),但这种有效的使在不同的命名空间控制器,所以它的实现相同的结果的一个更正式的方式。

2

你可以看看它说明了如何在阿比控制器可以成为剃刀意见的following blog post好。基本上他使用RazorEngine来解析剃刀视图最终服务它。

+1

Err ...谢谢,但是这看起来与我试图达到的目标极为相反,因为我试图“以MVC4的方式来做”,而不是屈从于做它没有设计的东西。 – 2012-07-19 16:25:57

+0

除此之外,我的两个网址会做完全不同的事情。我的普通URL提供了一个用户界面来执行各种操作。我的API网址只提供对数据的访问。所以这不是以不同格式返回“相同内容”的问题。 – 2012-07-19 16:27:40

+1

那么在这种情况下,'/ api'前缀不应该打扰你,因为它执行与应用程序其他部分完全不同的内容。它允许您清楚地将API部分与网站分开。 – 2012-07-19 16:28:19

1

对于任何一步的指导,就如何做到这一点上的WebAPI项目寻找步:

  1. 创建两个文件夹/命名空间,即:ControllersApiControllersWeb
  2. 右键单击ControllersWebAdd -> Controller和选择MVC 5 Controller - Empty。如果您的WebApi项目中没有它们,将会添加所有其他依赖项。
  3. RouteConfig现在注册那些从Controller基类继承的类。你可能会需要添加链接默认控制器,通过编辑默认地说:defaults: new { action = "Index", controller = "Home", id = UrlParameter.Optional }

就是这样,你现在可以运行网站,并同时使用API​​和Web控制器。

相关问题