我最近开始研究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中遇到的问题,或者我完全无法理解它。
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项目并且易于维护?
答案 0 :(得分:0)
在我看来,这两个图表在架构上都是正确的。
但你应该考虑 SRP 和关注点分离:如果MVC控制器+ WebApi控制器都是你的应用程序的入口点,运行相同的代码并返回它在2种不同的方式中,它们实际上是在做两种不同的事情吗?一个服务于视图,另一个服务于json。
另外,如果你必须渲染一个视图,那么自然会有一些与你的web api不同的行为(例如缓存或渲染局部视图)。
如果你认为一样,你应该忽略一下,在MVC 5中,MVC + WebApi控制器都属于同一个类并且由于上述原因而拆分它。
希望它有所帮助!