【问题标题】:WebApi and MVC controllersWebApi 和 MVC 控制器
【发布时间】:2012-12-12 03:42:13
【问题描述】:

我计划在我的应用程序中同时拥有 MVC 和 WebAPI 功能。将有一个使用简单的 MVC CRUD 控制器实现的管理站点,我还需要一个 RESTful API 来从远程客户端调用,并且将来可能从单页应用程序调用。 我不太愿意编写仅在返回类型上有所不同的非常相似的类——MVC 控制器返回包装在 View 中的数据,而 WebAPI 控制器只返回未包装的数据。 在不重复太多代码的情况下实现我的目标的最佳方法是什么?

【问题讨论】:

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


    【解决方案1】:

    一种方法是让您的 MVC 控制器不返回强类型视图模型。相反,他们可以返回普通的 HTML + javascript,可以使用诸如骨干网或敲除之类的东西来调用您的 Api 操作方法并填充 DOM。

    【讨论】:

      【解决方案2】:

      在我看来,如果您使用的是 WebAPI,那么您的标准 MVC 控制器不应该用于 CRUD。你的 API 控制器应该处理 CRUD 操作,你的 MVC 控制器应该返回视图。

      通过这条路线,它为您提供了几种不同的选项,用于在视图中显示数据:

      传统

      如果您想坚持更“传统”的路线,您可以从 MVC 控制器调用 WebAPI 控制器服务器端,水合模型对象并返回强类型视图。为此,您可以使用 HttpClient 类或 WebClient 类进行 API 调用并反序列化响应。

      单页

      如果您想尝试更“现代”的路线,您可以尝试 danludwig 的建议并构建更多的单页应用程序。在这种情况下,您的 MVC 控制器将只返回一个 HTML + JavaScript 视图,该视图依赖于客户端框架来进行 API 调用和更新 DOM。 require + backbone + knockback/knockout 堆栈是一个很好的起点,但它确实有一些学习曲线。

      不管怎样,你真的应该只在一个地方有 CRUD 逻辑,我相信这属于 API。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-18
        • 2017-11-21
        • 2017-07-16
        • 2014-01-05
        相关资源
        最近更新 更多