首页 文章

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

提问于
浏览
16

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

对于我的HTML网站,我有一个控制器和每个模型的视图(MVC!),并且路由工作"by convention",以便,例如,URL /client 连接到我的 ClientController . 我的 ClientController 来自 Controller .

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

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

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

3 回答

  • 1

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

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

  • 2

    您可以查看following blog post,它说明了Api控制器如何为Razor视图提供服务 . 基本上他用RazorEngine解析Razor视图结束服务吧 .

  • 12

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

    • 创建两个文件夹/命名空间,即: ControllersApiControllersWeb

    • 右键单击 ControllersWeb 并转到 Add -> Controller 并选择 MVC 5 Controller - Empty . 如果您在WebApi项目中没有它们,这将添加所有其他依赖项 .

    • 您的 RouteConfig 现在将注册从 Controller 基类继承的类 . 你可能需要添加链接到默认的Controller,通过编辑默认值来说: defaults: new { action = "Index", controller = "Home", id = UrlParameter.Optional }

    就是这样,您现在可以运行站点并使用API和Web控制器 .

相关问题