如果决定使用WebAPI创建用于各种客户端的服务层。构建Web客户端的最佳方法是什么?
由于WebAPI对Web友好,因此可以使用javascript直接从客户端使用它。但是我担心这会很快变得混乱,并且javascript不是最简单的单元测试技术。
另一种方法是使用HttpClient类从MVC控制器调用REST服务。这是一种有效的方法吗?
我认为上述两种方法可以合并,但我担心这会变得混乱。你是否同意采用一种方法或另一种方法更好?
对不起,我看过很多关于是否使用WebAPI或MVC的帖子,但没有关于两者合并的帖子。
思想?
答案 0 :(得分:17)
另一种方法是使用HttpClient类来调用REST 来自MVC控制器的服务。这是一种有效的方法吗?
是的,绝对的。只是这个代码不应放在您的控制器中,而应放在DAL层中,因为控制器不应该知道数据来自何处(平面文件,数据库,Web API等)。
所以有两种方法:
您选择哪种方法实际上取决于您的具体方案和要求。您是否需要支持除MVC客户端应用程序之外的可互操作客户端?无论如何,首先要在包含域模型和内容的单独程序集中定义服务层。然后,您可以始终通过Web API(或WCF服务或其他)公开此服务层,或直接从.NET客户端引用它。
答案 1 :(得分:1)
我认为你有一个MVC项目,并且你试图将api操作从MVC项目分离到一个单独的web api项目中?如果是这种情况,您必须在跳跃和创建单独的服务项目之前权衡利益。
一旦你创建了一个单独的web api项目,你就不能轻易地从你的MVC项目中的javascript中直接使用服务方法,因为跨域屏障(当然有JSONP和CORS但是他们没有这么做简单),所以你必须依赖HttpClient
类在控制器中创建不必要的包装器方法来与服务进行通信。
当您拥有需要api方法提供的数据的视图时,有必要考虑在同一MVC项目中使用api内容,但唯一的事情是您必须使用ApiController
而不是Controller