ASP.NET WebApi vs MVC?

154

使用ASP.NET MVC控制器可以以不同的格式公开数据。AspNetWebAPI专门设计用于创建API,但我可以轻松地使用MVC控制器来实现这一点,但我不清楚它比传统MVC控制器更好的情况是什么。我感兴趣的是,在哪些情况下WebApi的好处是显而易见的,值得为我的应用程序添加另一个复杂性层。

问题:使用ASP.NET WebApi相对于MVC有哪些优缺点?


1
可能是ASP.NET MVC中ApiController和Controller的区别的重复问题。 - digawp
13
对我来说,这些“对比”问题要么很快就被关闭,要么会爬升到一定的点赞水平,这让我感到很有趣。 - cbmeeks
16
我讨厌那些“被关闭,因为问题太宽泛”的标语。我经常发现像这样的好问题。而且往往也有很好的答案。就算它太宽泛了怎么样呢?专家们就在这里,不是在维基百科或其他论坛上。让他们做他们的事情,别挡道。 - nharrer
10个回答

53
WebApi允许创建可通过HTTP公开的服务,而不是通过形式化服务(如WCF或SOAP)进行。另一个区别在于WebApi使用Http协议的方式,使其成为真正的一流Http公民。
更新:ASP.NET Core中,Web API已集成到MVC项目类型中。ApiController类已合并到Controller类中。更多信息请参见:https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6 相关比较、讨论和教程链接:

enter image description here


21
不同意另一篇帖子很相似的说法。实际上,另一篇帖子是关于WCF和WebAPI之间的比较。 - Shane Courtrille
从技术上讲,它说的是WCF Web API,但是帖子在第二行提到它现在已经合并到Asp.net web api中,并支持自托管。无论如何,我已经使用更新的链接进行了更新。希望这能有所帮助。 - Yusubov
更新了引用。 - Yusubov

24

WebAPI 会生成 OData,因此您可以获得使用 OData 的所有优势。例如,使用 WebAPI 您可以获得以下功能:

  • 查询选项,如 $filter、$top、$orderby 等等。
    • 传统的 MVC 控制器需要自己实现这些功能。
  • 格式标准化
    • 有一些 OData 客户端可以理解您的 RESTful API 的底层格式。

6
可以。如果你在操作上加上“queryable”属性,我可以支持oData,至少在RC版本上是这样的。 - EBarr

21

Asp.Net Web API与Asp.Net MVC的区别 enter image description here 1. Asp.Net MVC用于创建既返回视图又返回数据的Web应用程序,而Asp.Net Web API用于创建仅返回数据而非视图的完整HTTP服务。

2. Web API有助于在.NET框架上构建RESTful服务,并支持内容协商(它涉及决定客户端可接受的最佳响应格式数据。可以是JSON、XML、ATOM或其他格式化数据),自托管等功能,而这些功能在MVC中没有。

3. Web API还负责按特定格式返回数据,如JSON、XML或任何其他基于请求中的Accept标头的格式,您不必担心这些细节。MVC仅使用JsonResult返回JSON格式数据。

4. 在Web API中,请求基于HTTP动词映射到操作,而在MVC中则基于操作名称进行映射。

5. Asp.Net Web API是一个新的框架,它是核心ASP.NET框架的一部分。模型绑定、过滤器、路由和其他MVC功能存在于Web API中,与MVC不同的是,它们存在于新的System.Web.Http程序集中。在MVC中,这些功能存在于System.Web.Mvc中。因此,Web API也可以用于Asp.Net,并作为独立的服务层。
6. 您可以在单个项目中混合使用Web API和MVC控制器来处理高级AJAX请求,这些请求可能以JSON、XML或其他格式返回数据,并构建完整的HTTP服务。通常,这将被称为Web API自托管。
7. 当您混合使用MVC和Web API控制器,并且想要实现授权时,您必须创建两个过滤器,一个用于MVC,另一个用于Web API,因为它们都是不同的。
8. 此外,Web API是轻量级架构,除了Web应用程序外,还可用于智能手机应用程序。
原始来源在这里

15

相似之处

  1. 两者都从ihttphandler继承异步请求,基本上apicontroller或mvc控制器都是web.http的包装器。

不同之处:

  1. MVC控制器非常重,如果您查看其定义,可以看到它使用了多少接口和基础代码,Web API是较轻的控制器,并通过传递的参数区分请求(是的,我们也可以更改!)

  2. MVC控制器具有太多功能,如返回视图、操作结果、JavaScript结果等,但Web API只有JSON或XML。

  3. API用于实现可独立托管在任何地方的Restful(GET、POST、PUT、DELETE、OPTIONS)服务,而不依赖于视图,MVC控制器无法支持该服务,因为它与视图紧密集成。


3
值得注意的是,您仍然可以使用MVC中的MVC操作结果(例如JSONResult等)实现类似API的行为。但正如您所指出的,MVC控制器更加庞大。此外,Web API控制器的实现方式比MVC更有利于创建API。 - Grizzly Peak Software

14

在某些时候,您可能想完全放弃ASP.NET MVC。如果您是.NET开发人员,但想构建单页面应用程序(例如使用Angular),则希望利用RESTful服务(WebAPI)的好处,而无需承受ASP.NET MVC带来的所有不必要的负担。


13

这张图片似乎展示了物质的差异和相似之处。希望这能对我有所帮助并且很有趣。

在此输入图片描述


7
ASP.NET MVC 和 ASP.NET Web API 两者都是用于不同目的的。
ASP.NET 提供三个框架来创建 Web 应用程序:Web Forms、ASP.NET MVC 和 ASP.NET Web Pages。所有这三个框架都是稳定而成熟的,您可以使用其中任何一个创建出色的 Web 应用程序。无论选择哪个框架,您都将在全局获得 ASP.NET 的所有优点和功能。
每个框架针对不同的开发风格。您选择的框架取决于您的编程资源(知识、技能和开发经验)、您正在创建的应用程序类型以及您熟悉的开发方法。在未来ASP.NET版本中,这三个框架都将得到支持、更新和改进。
MVC 提供了强大的基于模式的方法来构建动态网站,实现关注点分离,并为您提供完全控制标记的愉快、敏捷的开发体验。ASP.NET MVC 包括许多功能,可实现快速、面向 TDD 的开发,用于创建使用最新 Web 标准的复杂应用程序。
Web API 是一个框架,使构建 HTTP 服务变得容易,这些服务可达到广泛的客户端,包括浏览器和移动设备。ASP.NET Web API 是在 .NET Framework 上构建 RESTful 应用程序的理想平台。
您可以从这里阅读更多信息:http://www.dotnet-tricks.com/Tutorial/webapi/Y95G050413-Difference-between-ASP.NET-MVC-and-ASP.NET-Web-API.html

6

ASP.NET MVC专注于使HTML输出变得简单。ASP.NET Web API专注于使原始数据的输出变得简单。

在WebForms世界中,ASP.NET MVC相当于.aspx页面,而ASP.NET Web API相当于.asmx。


3

Asp.Net MVC被用于创建既返回视图又返回数据的Web应用程序,而Asp.Net Web API则用于创建完整的HTTP服务,以简单易懂的方式仅返回数据而不是视图。

Web API有助于在.NET Framework上构建RESTful服务,它还支持内容协商(这是关于决定客户端可接受的最佳响应格式数据的问题。它可以是JSON、XML、自托管等,这些都不在MVC中)。

Web API还负责按照请求中的Accept标头以特定格式返回数据,如JSON、XML或任何其他格式,您无需担心。MVC只使用JsonResult以JSON格式返回数据。


1
通常情况下,WebAPI用于数据服务,而MVC可以生成更多类型的输出。
毫无疑问,WebAPI简化了我们创建数据服务的方式。对于这个目的来说,它很干净、容易使用。而MVC则带有更多相关工具。
MVC可以生成任何WebAPI能够输出的内容。在MVC中,从模板生成输出非常容易实现。我找不到在WebAPI中这样做的理由。PHP开发人员和旧版ASP程序员可能会从过去知道这种态度,其中您可以构建包含C#代码的HTML文件。
WebAPI- 数据 MVC - 数据、UI/HTML、XHTML、文件、模板等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接