Asp.net mvc 4 理解新的webapi方法

Asp.net mvc 4 理解新的webapi方法,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我知道,在开发MVC应用程序时,并不是每个人都使用完整的体系结构,但假设我有以下体系结构: App.Core --> Class Library (POCO or Domain objects) App.Data --> Class Library (Repository and Entity Framework) App.Service --> Class Library (Service layer with all business logic) App.Web --&g

我知道,在开发MVC应用程序时,并不是每个人都使用完整的体系结构,但假设我有以下体系结构:

App.Core --> Class Library (POCO or Domain objects)
App.Data --> Class Library (Repository and Entity Framework)
App.Service --> Class Library (Service layer with all business logic)
App.Web --> asp.net MVC 3.0 project

在我们的MVC应用程序中,我们尝试采用以下方法:

  • 在控制器内部(在方法中),我们实例化了一个ViewModel
  • 我们从App.Service层填充ViewModel调用方法
  • 填充ViewModel后,我们将其返回到视图(因此视图 现在是强类型)
99.9%的情况下会发生这种情况。它是干净的,我们喜欢它,而且它能很好地利用自己……等等

现在我的问题是:

如果我们决定将应用程序迁移到MVC4.0并开始使用 新的Web API方法,我不确定我是否完全理解在哪里(或如何) 它是否适合我们当前的架构

请记住,我们愿意改变这一切

我们应该在App.Service和App.Web之间创建一个新的App.WebAPI层吗? 这意味着在我们的控制器中,我们不再需要直接调用App.Service,而是调用新的App.WebAPI层

或者,将Web API留在App.Web层中,让控制器调用其他APIController,而这些APIController又会调用App.Service层

不确定我在这里是否有意义…但请随意提出任何建议,因为我对不同的输入很好奇


谢谢

有几个案例需要考虑:

您想让这个Web API作为MVC应用程序的服务层和数据访问吗?如果是,那么您应该从ASP.NET MVC项目中完全删除App.Service的所有引用,并让它查询Web API以获取数据。在这种情况下,Web API位于ASP.NET MVC应用程序和数据访问之间。是Web API与服务层对话并通过HTTP协议将其公开


或者,您是否希望为您的网站提供可供其他客户端(web浏览器除外)使用的附加API?在本例中,ASP.NET MVC应用程序和Web API位于同一层上。都可以查询服务层以填充视图模型,只是在MVC应用程序中,您将这些视图模型传递给视图,这些视图将它们转换为HTML,而在Web API层中,您可能使用稍有不同的视图模型,但它们仍然是从服务层填充的,并通过相应的序列化机制传递给客户机(JSON,XML,…)

我知道这已经晚了,但我实际上在寻找同样的建议,我找到了这篇文章

难道MVC和Web API不在同一层中吗意味着要对代码进行更多的维护工作,或者可能是重复代码?mvc web不被视为浏览器客户端吗?对我来说,让WebAPI成为其他人的唯一层是有意义的,反过来它会调用您的服务层进行处理


让Web API和MVC直接与服务层对话有什么好处?Web API难道不能成为服务层的包装器吗?

我相信您的第二种方法就是我们正在寻找的。考虑到我们可能有其他客户端(iPad、iPhone等)因此,我们的结论是让MVC和Web API位于同一层。让它们都与服务层(包含业务逻辑)交互反过来,根据谁调用了什么来填充不同的视图模型。正确吗?@Vlince,没错。你已经很好地总结了它。就什么是最佳方法而言,我也处于相同的情况@DarinDimitrov或Vlince。你能不能创建一个空模板来查看正在运行的服务?你什么时候会想使用web api作为服务层对于你们的mvc应用程序,若它们在同一个解决方案上(你们提到的第一种方法)??我认为,在第二种选择中,Web API将只用于向网络公开服务层的某些部分,所以它的操作将完全并没有逻辑(只调用服务层)。它是一个非常薄的代理,因此易于维护,并且不存在重复代码的可能性。概念性示例:您有一个功能完整的MCV网站,希望具有上述架构或类似的架构。现在,您的经理说您需要移动应用程序。您需要另一层。假设您的网站具有登录。此日志in通过用户名/密码进行服务调用,成功后返回完整网站上的配置文件或错误页面。API位于移动应用程序和服务层之间,与网站位于同一层,但返回一些JSON,而不是{success:true,UID:some number},允许手机以自己的呈现方法绘制配置文件页面。
App.Data --> Has a reference to App.Core
App.Service --> Has a reference to App.Core and App.Data
App.Web --> Has a reference to App.Core and App.Service