Asp.net core mvc 从MVC控制器在同一应用程序中使用Web API

Asp.net core mvc 从MVC控制器在同一应用程序中使用Web API,asp.net-core-mvc,asp.net-core-webapi,Asp.net Core Mvc,Asp.net Core Webapi,我正在编写一个在.NETCore中同时提供WebAPI和MVC内容的应用程序。我想从MVC控制器调用API的函数并接收返回的数据。有没有比使用HttpClient或类似的东西更好的方法?比如在MVC控制器中实例化API的控制器类?我不能只去newapicontroller()由于它依赖于依赖项注入,我可以吗?如果您的应用程序同时具有ASP.Net MVC和Web API部件,那么最好的解决方案是将获取任何数据所需的任何功能/业务逻辑放在服务层中。然后MVC和WebAPI都可以直接使用它们,而无需

我正在编写一个在.NETCore中同时提供WebAPI和MVC内容的应用程序。我想从MVC控制器调用API的函数并接收返回的数据。有没有比使用
HttpClient
或类似的东西更好的方法?比如在MVC控制器中实例化API的控制器类?我不能只去
newapicontroller()由于它依赖于依赖项注入,我可以吗?

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

老实说,无论您同时拥有MVC和WebAPI,还是只有一个,这都是一个很好的实践。这将允许不同的API/MVC控制器访问应用程序中的相同数据,而无需重复代码

看看洋葱架构,它通常有4层

  • 用户界面(MVC/WebAPI)
  • 服务层(适用于所有业务逻辑)
  • 存储库层(用于数据持久化)和
  • 所有域实体的公共基础层(跨所有层的公共POCO)
  • 有一种解释洋葱建筑的方法

    “比如在MVC控制器中实例化API的控制器类?”

    不,这不是一个好主意,而且无论如何也不会真正起作用。您可以像前面提到的那样发出HTTP请求,但是如果所有内容都已经是应用程序的一部分,那么它就没有那么高效了

    但是,如果实际获取数据的功能位于一个单独的类中,那么您可以调用该类的相关方法并直接获取数据——无论如何,将其作为变量获取可能比作为JSON获取要好

    这与您的应用程序设计有关——从功能上来说,检索数据(例如从数据库)的过程应该与向用户提供数据的过程(例如通过API控制器作为JSON)是分开的。因此,任何代码都应该能够调用数据检索功能,而不仅仅是API


    从概念上讲,您可能希望将这些视为不同的功能层。这是软件中常见的体系结构模型—表示层,(可选)逻辑层和数据层。

    Duplicate:我如何在这个单独的类中连接到数据库?我也可以在那里使用DI吗?我看不出有什么理由不使用。依赖注入只是一种设计模式,它与任何特定技术(如WebAPI)都没有联系