从MVC Controller在同一应用程序中使用Web API

时间:2018-11-15 14:54:47

标签: asp.net-core-mvc asp.net-core-webapi

我正在编写一个同时在.NET Core中提供Web API和MVC内容的应用程序。我想从MVC控制器调用API的函数,并接收返回的数据。是否有比使用HttpClient或类似方法更好的方法?像在MVC控制器中实例化API的控制器类一样?我不能只去new ApiController();,因为这取决于依赖项注入,可以吗?

2 个答案:

答案 0 :(得分:4)

  

“像在MVC控制器中实例化API的控制器类吗?”

不,这不是一个好主意,无论如何也不会真正起作用。您可以发出您提到的HTTP请求,但是如果所有内容都已包含在应用程序中,则效率不高。

但是,如果实际获取数据的功能在单独的类中,则可以调用该类的相关方法并直接获取数据-无论如何,将其作为变量而不是JSON可能更好。

关于应用程序设计的所有内容-检索数据(例如从数据库)的过程在功能上应与向用户提供数据的过程(例如通过API控制器以JSON形式)分开。因此,任何代码都应该能够调用数据检索功能,而不仅仅是API。

从概念上讲,您可能希望将它们视为功能的不同。它是软件中的常见架构模型-表示层,(可选)逻辑层和数据层。

答案 1 :(得分:3)

如果您的应用程序同时具有ASP.Net MVC和Web API部分,那么最好的解决方案是将获取任何数据所需的任何功能/业务逻辑放在服务层中。然后,MVC和Web API都可以直接使用它们,而不必启动HttpClient(或类似客户端)。

说实话,无论您同时拥有MVC和Web API,还是只有一个,这都是一个好习惯。这样一来,不同的API / MVC控制器即可访问应用程序中的相同数据,而不必重复编写代码。

看看通常有4层的洋葱架构。

  1. UI(MVC / Web API)
  2. 服务层(用于所有业务逻辑)
  3. 存储层(用于数据持久性)和
  4. 所有域实体的公共基础层(所有层中共有的POCO)。

有一个good article over on C# Corner解释了洋葱架构。