使用API​​的MVC项目和MVC项目

时间:2016-03-17 07:00:52

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-mvc-5

我最近开始研究MVC应用程序。但是我的第一个计划是在同一个解决方案中创建两个单独的项目。一个asp.net MVC Web应用程序,第二个是asp.net WebAPI。因此,我的Web应用程序将与Web API进行通信,而Web API反过来将向应用程序发送JSON响应,该应用程序将转换为View Model for View。

工作流程图:

enter image description here

随着我的研究越来越多,我知道API控制器和控制器都合并到了MVC 5中的单个控制器类中。所以我的问题是如何在 MVC 5 中实现上述工作流程。

MVC 5工作流程图

enter image description here

所以这就是我在MVC 5中遇到的问题,或者我完全无法理解它。

UserModel

  public class UserModel
  {
    Public int UserId {get;set;}
    Public string Username {get;set;}
  }

UserController中

   [HttpGet()]
    public IActionResult GetUser(int id)
   {
      // do some work
      return View(userObject);
   }

查看

   @model UserModel
   <h1>@Model.Username</h1>

但是当我从移动设备调用上面的方法时,它会给我渲染的html,这对我没用,所以我需要在同一个控制器中创建另一个方法,在该控制器中将返回JSON中的数据。

   [HttpGet()]
   public IActionResult ApiGetUser(int id)
   {
      // do some work
      return JSONResponse.. ;
   }

修改方法:

[HttpGet()]
    public IActionResult GetUser(int id)
   {
      // calling api get user method
         ApiGetUser(int id); // return json
      // do some work to convert json into ModelObject
       return View(userObject);
   }

如果任何一个移动应用程序需要数据,它可以调用m APIGetUser 方法,但在这种情况下,对我来说,它很繁琐,并且不会在同一个类中添加额外的方法。所以我的基本问题是我对流程的理解是错误的,或者我错过了一些东西,因为如果下面提到的工作流程是正确的,我希望第一个工作流程作为其独立的WebAPI项目并且易于维护?

1 个答案:

答案 0 :(得分:0)

在我看来,这两个图表在架构上都是正确的。

但你应该考虑 SRP 关注点分离:如果MVC控制器+ WebApi控制器都是你的应用程序的入口点,运行相同的代码并返回它在2种不同的方式中,它们实际上是在做两种不同的事情吗?一个服务于视图,另一个服务于json。

另外,如果你必须渲染一个视图,那么自然会有一些与你的web api不同的行为(例如缓存或渲染局部视图)。

如果你认为一样,你应该忽略一下,在MVC 5中,MVC + WebApi控制器都属于同一个类并且由于上述原因而拆分它。

希望它有所帮助!