我计划在我的应用程序中同时使用MVC和WebAPI功能。将有一个使用简单的MVC CRUD控制器实现的管理站点,我还需要从远程客户端调用RESTful API,并且可能在将来从单个页面应用程序调用。 我不太喜欢编写非常相似的类,这些类仅在返回类型上有所不同 - MVC控制器返回包含在View和WebAPI控制器中的数据,只是返回打开的数据。 在不重复太多代码的情况下实现目标的最佳方法是什么?
答案 0 :(得分:5)
在我看来,如果您使用的是WebAPI,则不应将标准MVC控制器用于CRUD。您的API控制器应该处理CRUD操作,并且您的MVC控制器应该返回视图。
通过这条路线,它为您提供了几种不同的选项,让您了解如何在视图中显示数据:
<强>传统强>
如果您想坚持使用更“传统”的路线,可以从MVC控制器调用WebAPI控制器服务器端,水合模型对象并返回强类型视图。您可以使用HttpClient类或WebClient类来进行API调用和反序列化响应。
单页
如果您想尝试更“现代”的路线,可以尝试danludwig建议的内容并构建更多单页应用。在这种情况下,您的MVC控制器将返回一个HTML + JavaScript视图,该视图依赖于客户端框架来进行API调用并更新DOM。 require + backbone + knockback / knockout堆栈是一个很好的起点,但确实有一点学习曲线。
无论哪种方式,你真的应该只在一个地方拥有CRUD逻辑,我相信这属于API。
答案 1 :(得分:1)
一种方法是让MVC控制器不返回强类型视图模型。相反,他们可以返回纯HTML + javascript,可以使用像backbone或knockout这样的东西来调用你的Api动作方法并填充DOM。