我能同时拥有一个Controller和一个ApiController吗?

时间:2012-07-19 16:10:10

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

我刚刚开始使用VS 2012 RC,我正在创建一个ASP.NET MVC 4 Web应用程序,我计划在其中提供基于HTML的用户界面和基于WebApi的编程界面。 / p>

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

对于我的API,我将创建源自Controller的新控制器。我自然希望我的API网址与我的HTML网址类似,因此我希望客户信息可以在ApiController处获得。但是,使用按惯例路由,这表明我需要一个名为/api/client的ApiController。我已经有ClientController课了。

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

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

3 个答案:

答案 0 :(得分:12)

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

使用MVC区域也可以工作(如gordonml的评论中所述),但这有效地将控制器放在不同的名称空间中,因此这是一种更正式的方法来实现相同的结果。

答案 1 :(得分:2)

您可以查看following blog post,其中说明了Api控制器如何为Razor视图提供服务。基本上他使用RazorEngine来解析Razor视图的最终服务。

答案 2 :(得分:1)

对于在WebApi项目中寻找有关如何执行此操作的分步指导的任何人:

  1. 创建两个文件夹/命名空间,即:ControllersApiControllersWeb
  2. 右键点击ControllersWeb,然后转到Add -> Controller并选择MVC 5 Controller - Empty。如果您没有在WebApi项目中使用它们,这将添加所有其他依赖项。
  3. 您的RouteConfig现在将注册从Controller基类继承的类。您可能需要添加指向默认控制器的链接,方法是编辑默认值:defaults: new { action = "Index", controller = "Home", id = UrlParameter.Optional }
  4. 就是这样,您现在可以运行网站并使用API​​和Web控制器。