我正在编写一个同时在.NET Core中提供Web API和MVC内容的应用程序。我想从MVC控制器调用API的函数,并接收返回的数据。是否有比使用HttpClient
或类似方法更好的方法?像在MVC控制器中实例化API的控制器类一样?我不能只去new ApiController();
,因为这取决于依赖项注入,可以吗?
答案 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层的洋葱架构。
有一个good article over on C# Corner解释了洋葱架构。