MVC 5 项目和 Web Api 项目的区别

136

我刚接触 ASP.NET MVCWeb API,正在尝试了解基本知识。据我所知,我们在VS 2013中有项目模板,命名为MVCWeb API两者结合

我已经阅读了教程,并学到我们可以使用单独的MVC或与Web API模板一起创建API。

那么,基于架构用法,它们之间有什么区别呢?


今天,在ASP.NET Core中,MVC和Web API之间不再有任何区别。只有ASP.NET MVC:https://learn.microsoft.com/en-us/dotnet/architecture/porting-existing-aspnet-apps/webapi-differences - volkit
4个回答

185
基本上,Web API 控制器是一个 MVC 控制器,它使用 HttpMessageResponse 作为其响应的基本类型,而不是 ActionResponse。在其他方面它们大致相同。项目类型之间的主要区别在于 MVC 应用程序 项目类型添加了特定于 Web 的内容,例如默认的 CSSJavaScript 文件和其他网站所需资源,而这些对于 API 不需要。
MVC 用于创建网站。在此情况下,控制器通常会返回一个视图(即 HTML 响应)给浏览器请求。另一方面,Web API 通常被设计成供其他应用程序使用。如果您希望允许其他应用程序访问您的数据/功能,则可以创建一个 Web API 来促进此访问。例如 Facebook 就拥有一个 API,以便允许应用程序开发人员访问使用 App 的用户信息。Web API 不一定是供公众使用的。您也可以创建一个 API 来支持自己的应用程序。例如,我们创建了一个 Web API 来支持我们 MVC 网站的 AJAX 功能。
微软改变了他们呈现不同模板的方式。现在,他们鼓励开发人员将 ASP.NET 技术混合在同一个项目中,根据需要使用。微软称这个为 vNext
更新:对于 ASP.NET Core,Web API 已经整合到了 MVC 6 项目类型中,ApiController 类集成到 Controller 类中。更多细节请参见:https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6

1
谢谢Elad,我明白了。你能编辑一下你的回答,加上有关Asp.net Identity和Web Api 2的内容吗?就是它们将如何被使用和受益的一些话。只需要简单说明即可。 - loop

70

我个人的观点是...

  1. ASP.Net MVC中,MVC的Controller决定了应该显示什么View - 即,当用户发出请求时,控制器基于当前情景或上下文决定用户应该“看到”什么。
  2. 而在ASP.Net Web Forms中,ASPX页面决定了用户发出请求时应该显示什么。
  3. 但是在Web API中,没有任何Web API的功能可以决定用户发出请求时应该看到什么。

Web API不是只与网站相关的技术。它可用于多种目的 - 不仅限于网站。因此,它不知道rendering的含义。

更多阅读

  1. 计划Web解决方案:Web Forms、ASP.NET MVC、Web API和OWIN。
  2. WCF还是ASP.NET Web API?我的个人观点
  3. .NET的下一代 - ASP.NET vNext
  4. 开始使用ASP.NET MVC 6

我无法从比较的代码中看出为什么WebAPI更易读。此外,似乎有些东西被翻转了,因为Web API应该有一个HTTP方法属性,例如[HttpGet]。在此处检查一些WebAPI(和WebAPI 2)代码:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results - Gobe
2
被接受的答案声称“基本上,Web API控制器是一个MVC控制器”。这完全是错误的。你的回复指出了WebAPI的整个POINT就在于它不是MVC,它不必处理所有与“视图”和“渲染”相关的负担和开销。...而且WebApi控制器甚至不必仅与网站绑定。非常好的回复-谢谢! - FoggyDay

0
除了这里已经提供的答案之外,值得注意的是,任何继承自ApiController并具有Http动词POST的操作的控制器只能有一个[FromBody]输入参数。如果使用MVC控制器(派生自'Controller'),则可以有多个post输入参数。

0

MVC控制器派生自控制器类。在Mvc中,您可以返回视图。Mvc架构用于创建应用程序。但是Web API用于向各种应用程序提供数据。

Web Api从Api控制器驱动,不返回视图。

注意:您还可以从MVC控制器创建Web Api,但需要将结果作为JsonResult或其他Web Api支持的返回类型返回。


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