gpt4 book ai didi

asp.net-mvc - 如何以及在何处使用Web API2和MVC 5应用程序

转载 作者:行者123 更新时间:2023-12-02 00:34:22 24 4
gpt4 key购买 nike

我来自MVC开发背景并且确实了解Web Api的概念,但是我很难理解,例如,如果我在MVC应用程序上工作,该在哪里使用Web Api。

如果要在Web API中构建应用程序,我是否不再需要MVC,即MVC控制器,Razor代码,强类型数据绑定?

我想了解MVC应用程序以及Web API。从建筑的角度

我有一个新鲜的项目,该如何使用Web API。

非常感谢

最佳答案

这是一个棘手的问题,您知道吗?但是,基于我使用这两种框架开发不同应用程序和服务的经验,我将尝试发表自己的看法。

我认为这两个框架之间最显着的区别在于它们的设计目标:MVC是(过去一直被用来)构建网站的构想,而Web API最初是用来构建服务的框架。

MVC

MVC在建立使用传统交互模型的网站和Web应用程序方面表现出色,该模型基于Web浏览器作为客户端,同步交互(不包含或不包含AJAX)和HTML作为主要表示语言(这就是我们通常在控制器内部返回View的原因)。

从体系结构的角度来看,MVC可以看作是跨越Presentation和Service层的框架:它可以通过严格由填充的View驱动的界面来构建已经是Web应用程序的服务。尽管可以从更高的角度将这种应用程序类型定义为可互操作,但它肯定会限制于一种客户端(Web浏览器)。

网络API

取而代之的是,Web API被明确设计为构建服务的框架,其中许多概念是从我们过去从实现Web Services和SOA中学到的知识继承而来的。其目的是允许各种不同的设备和客户端通过HTTP使用服务。它不仅限制仅访问Web浏览器,而且可以轻松用作任何客户端应用程序(移动应用程序,SPA,甚至其他独立服务)与后端/业务逻辑之间的抽象层(前面提到的服务层),而不会丢失REST原则和HTTP协议提供的所有架构和互操作性优势。

当与客户端框架(如AngularJS,React,Backbone)结合使用时,Web API表现出色,因为它成为数据和业务逻辑的引擎,从而使这些框架能够在用户与整个应用程序之间创建更加流畅和异步的交互。

虽然MVC可以用于此目的可能是有争议的,但不可否认的是,MVC并非旨在成为构建由不同类型的客户端使用的服务的框架。

他们不一样吗?

如果我们看一下这两个框架的内部架构,我们可能会发现许多共同点。这就是为什么许多人之间没有明确区分的主要原因。在不久的将来(它们现在处于beta版),它们将被合并到ASP.NET Core中的单个框架(MVC6)中。

一起使用时

我认为,没有多少用例会要求您在单个项目中同时使用MVC和Web API。其背后的原因与UI呈现中采用的不同方法有关:在MVC Web应用程序中,页面是使用强类型ViewModel在服务器端呈现的,同时将呈现的一小部分委派给AJAX调用(但这些不应占多数,否则您会发现对框架的要求过高)。

在利用REST服务(例如使用Web API创建的服务)的现代Web应用程序中,UI(几乎)完全在客户端呈现,因此几乎不需要服务器端呈现/模型绑定:您将通过结合服务器数据(例如JSON格式)和客户端上的静态资产(HTML,CSS3,JavaScript)的UI组成。

当您需要以传统方式(使用MVC)提供Web应用程序,但又需要向外部客户端提供服务时,将这两个框架结合在一起可能会很有用:您的用户将使用您的MVC应用程序,而其他服务将使用Web API端点(类似于Facebook,Twitter等)。

另一个示例可能是一种混合方法,在这种方法中,您呈现了网站服务器端的一部分(使用Razor),而网站的最动态部分是通过对Web API端点的AJAX调用来提供的(例如,自动完成字段,异步调用) 。但是,坦率地说,我认为这可能会导致无用的复杂性,并且如果AJAX调用不那么多,我会坚持使用MVC(如果需要可以返回JSON对象)。

TL; DR

如果您需要构建动态服务器端网站,请使用MVC。如果您需要构建异构客户端(SPA,移动应用程序等)使用的富Web应用程序,请使用Web API。最后,如果要将服务公开给独立的外部使用者,但又希望自己使用较少的抽象层来使用它们,请同时使用两者。

更多:
On The Coexistence of ASP.NET MVC and WebAPI
ASP.NET Web API vs. ASP.NET MVC “APIs”

关于asp.net-mvc - 如何以及在何处使用Web API2和MVC 5应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36620149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com