【问题标题】:MVC Project and MVC project with APIMVC 项目和带有 API 的 MVC 项目
【发布时间】:2016-07-03 09:23:03
【问题描述】:

我最近开始研究 MVC 应用程序。然而,我的第一个计划是在同一个解决方案中创建两个单独的项目。一个是 asp.net MVC Web 应用程序,第二个是 asp.net WebAPI。这样我的 Web 应用程序将与 Web API 对话,Web API 作为回报将向应用程序发送 JSON 响应,该应用程序将被转换为 View Model for View。

工作流程图:

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

MVC 5 工作流程图

所以我在 MVC 5 中遇到了问题,或者我无法完全理解它,例如:

用户模型

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

用户控制器

   [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 项目并且易于维护?

【问题讨论】:

  • 你需要 MVC 吗?如果为移动应用构建,您可以只使用 WeApi,无需 mvc 和 razor。
  • 先生,我有一个可以在基于移动设备和基于网络的应用程序上运行
  • 我的意思是基于移动的移动应用程序、混合移动应用程序、使用 Cordova 或 Secha、离子等构建...
  • 无论如何,在您的第一个图表中,您已经使用 web api 来返回 json。你的 mvc 控制器可以返回 json。
  • 你需要弄清楚/决定的是; API 是您功能的核心吗?如果您希望您的 MVC 应用程序始终使用(Web)API - 那么我会说您应该拆分它们并让您的 MVC 请求来自您的 API,因为这意味着您将能够更改 MVC 实现而不影响您的 API 实现.关注点分离等等。

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


【解决方案1】:

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

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

另外,如果您必须渲染视图,自然会有一些您的 Web api 不常见的行为(例如缓存或渲染部分视图)。

如果你有同样的想法,你应该抛开在 MVC 5 中两个 MVC+WebApi 控制器属于同一类并出于上述原因将其拆分。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2011-03-29
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2015-06-02
    相关资源
    最近更新 更多