它是从MVC控制器调用WEBAPI服务的反模式吗?

Dan*_*yan 11 .net asp.net-mvc asp.net-web-api

如果决定使用WebAPI创建用于各种客户端的服务层.构建Web客户端的最佳方法是什么?

由于WebAPI对Web友好,因此可以使用javascript直接从客户端使用它.但是我担心这会很快变得混乱,并且javascript不是最简单的单元测试技术.

另一种方法是使用HttpClient类从MVC控制器调用REST服务.这是一种有效的方法吗?

我想上面的两种方法可以合并,但我担心这会变得混乱.你是否同意采用一种方法或另一种方法更好?

对不起,我看过很多关于是否使用WebAPI或MVC的帖子,但没有关于两者的结合.

思考?

Dar*_*rov 17

另一种方法是使用HttpClient类从MVC控制器调用REST服务.这是一种有效的方法吗?

是的,一点没错.只是这个代码不应放在您的控制器中,而应放在DAL层中,因为控制器不应该知道数据来自何处(平面文件,数据库,Web API等).

所以有两种方法:

  • 您决定使用HTTP协议从MVC客户端应用程序中使用Web API.在这种情况下,您将为您的存储库(DAL层)创建一个实现,该实现将使用HTTP客户端并直接返回域模型
  • 您决定直接使用此Web API中包含的服务而不发送HTTP请求.在这种情况下,您将在MVC客户端应用程序中引用包含Web API服务层的程序集,并直接将此程序集成为MVC应用程序的服务层.在这种情况下,Web API通过HTTP服务于其他客户端:javascript,mobile,...

您选择哪种方法实际上取决于您的具体方案和要求.您是否需要支持除MVC客户端应用程序之外的可互操作客户端?无论如何,首先要在包含域模型和内容的单独程序集中定义服务层.然后,您可以始终通过Web API(或WCF服务或其他)公开此服务层,或直接从.NET客户端引用它.