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


135

我是ASP.NET MVCWeb API的新手,正在尝试获取基础知识。据我所知,我们在VS 2013项目模板,命名为MVCWeb APIBoth of them together

我遍历了教程,了解到我们可以单独使用MVC以及使用Web API模板来制作API。

那么,基于体系结构用法,它们之间有什么区别?

Answers:


182

基本上,Web API控制器是一个MVC控制器,它使用HttpMessageResponse而不是作为其响应的基本类型ActionResponse。它们在大多数其他方面是相同的。项目类型之间的主要区别在于,MVC Application项目类型添加了Web特定的东西,例如default CSSJavaScript文件和网站所需的其他资源,而API则不需要。

MVC用于创建网站。在这种情况下,Controllers通常会View向浏览器请求返回一个(即HTML响应)。另一方面,通常使Web API被其他应用程序使用。如果要允许其他应用程序访问您的数据/功能,则可以创建一个Web API来促进这种访问。例如,Facebook有一个API,以便允许App开发人员访问有关使用该App的用户的信息。Web API不必供公众使用。您还可以创建一个API来支持自己的应用程序。例如,我们创建了一个Web API以支持MVC网站的AJAX功能。

Microsoft更改了他们呈现不同模板的方式。现在,他们鼓励开发人员在需要的同一个项目中混合使用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,我明白了。您能对您的ans进行编辑并添加有关Asp.net Identity和Web Api 2的信息吗?
2014年

因此,我绝对无法从dektop应用程序访问控制器操作。即使我使用正确的GET语法来调用URL?
坚不可摧的

70

我的两分钱

  1. ASP.Net MVC中-MVC Controller决定应该是什么View-即,控制器在用户发出请求时决定用户应该“看到”的内容(基于当前方案或上下文)。
  2. ASP.Net Web窗体中ASPX页面决定用户发出请求时应“看到”的内容。
  3. 但是在Web API中,Web API的任何功能都无法控制/确定用户在发出请求时应“看到”的内容。

Web API并非仅与网站捆绑在一起的技术。它可以用于多种目的–不仅限于网站。所以它不知道rendering

进一步阅读

  1. 当今规划Web解决方案:Web表单,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]。在此处
Gobe

2
接受的答案指出“基本上,Web API控制器是MVC控制器”。那是完全错误的。您的答复指出,WebAPI 的全部要点是它不是 MVC,它不必处理“视图”和“渲染”的所有包and和开销。...并且WebApi控制器甚至不必只与网站捆绑在一起。很好的答复-谢谢!
FoggyDay '18

0

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

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

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


0

除了此处已经提供的答案外,值得注意的是,任何从ApiController继承并具有Http动词POST动作的控制器只能具有一个[FromBody]输入参数。如果使用MVC控制器(源自“ Controller”),则可以具有许多后期输入参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.