我是 ASP.NET MVC 和 Web API 的新手,并试图获得基础知识。 AFAIK,我们在VS 2013中有项目模板,名为MVC
,Web API
和Both of them together
。
我已经阅读了这些教程并了解到我们可以通过单独使用MVC以及使用Web API模板来创建API。
那么,基于架构和用法,它们之间有什么区别?
答案 0 :(得分:177)
基本上,Web API
控制器是MVC
控制器,它使用HttpMessageResponse
作为其响应的基本类型,而不是ActionResponse
。它们在大多数其他方面都是相同的。项目类型之间的主要区别在于MVC Application
项目类型添加了特定于Web的内容,例如默认CSS
,JavaScript
文件和网站所需的其他资源,这些不是API。
MVC用于创建网站。在这种情况下,Controllers
通常会向浏览器请求返回View
(即HTML响应)。另一方面,Web API通常被其他应用程序使用。如果要允许其他应用程序访问您的数据/功能,可以创建Web API以方便此访问。例如,Facebook有一个API,以允许App开发人员访问有关使用该应用程序的用户的信息。 Web API不必用于公共消费。您还可以创建API以支持您自己的应用程序。例如,我们创建了一个Web API来支持MVC网站的AJAX功能。
Microsoft改变了呈现不同模板的方式。现在,他们不是为不同的项目类型使用不同的模板,而是鼓励开发人员根据需要在同一个项目中混合使用ASP.NET技术。 Microsoft称之为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 :(得分:70)
我的两分钱......
Controller
决定应该是View
- 即,控制器决定用户应该“看到”的内容(基于当前场景或上下文),当他们提出请求时。ASPX
页面决定用户在提出请求时应“看到”的内容。 Web API不仅仅是与网站捆绑在一起的技术。它可以用于多种用途 - 不仅仅是网站。所以它不知道rendering
进一步阅读
答案 2 :(得分:0)
MVC控制器派生自控制器类。在Mvc中,您可以返回视图。 Mvc achitecture用于创建应用程序。但是,Web apis用于向各种应用程序提供数据。
Web Api从Api控制器驱动,它不会返回视图。
注意:您也可以从MVC控制器创建Web Api,但是您需要将结果作为JsonResult或其他支持Web api的返回类型返回。
答案 3 :(得分:0)
除了这里已经提供的答案之外,值得注意的是任何从ApiController继承并且具有Http动词POST动作的控制器只能有一个[FromBody]输入参数。如果使用MVC控制器(从'Controller'派生),您可以有许多后置输入参数。