我是 ASP.NET MVC 和 Web API 的新手,并试图获得基础知识 . AFAIK,我们在VS 2013中有项目模板,名为 MVC , Web API 和 Both of them together .
MVC
Web API
Both of them together
我已经完成了教程并了解到我们可以通过单独使用MVC以及使用Web API模板来创建API .
那么,基于 Architecture 和 Usage ,它们之间有什么区别?
基本上, Web API 控制器是 MVC 控制器,它使用 HttpMessageResponse 作为其响应的基本类型,而不是 ActionResponse . 它们在大多数其他方面都是相同的 . 项目类型之间的主要区别在于 MVC Application 项目类型添加了Web特定的内容,例如默认 CSS , JavaScript 文件和网站所需的其他资源,这些都是API不需要的 .
HttpMessageResponse
ActionResponse
MVC Application
CSS
JavaScript
MVC用于创建网站 . 在这种情况下, Controllers 通常会向浏览器请求返回 View (即HTML响应) . 另一方面,Web API通常被其他应用程序使用 . 如果要允许其他应用程序访问您的数据/功能,可以创建Web API以方便此访问 . 例如,Facebook有一个API,以允许App开发人员访问有关使用该应用程序的用户的信息 . Web API不必用于公共消费 . 您还可以创建API以支持您自己的应用程序 . 例如,我们创建了一个Web API来支持MVC网站的AJAX功能 .
Controllers
View
Microsoft改变了他们呈现不同模板的方式 . 现在,他们不是为不同的项目类型使用不同的模板,而是鼓励开发人员根据需要在同一个项目中混合使用ASP.NET技术 . 微软称之为 vNext .
vNext
UPDATE: 对于ASP.NET Core,Web API已集成到MVC 6项目类型中, ApiController 类已合并到 Controller 类中 . 更多详情:https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6
ApiController
Controller
我的两分钱......
在 ASP.Net MVC 中 - MVC的 Controller 决定应该是什么 View - 即,控制器在他们发出请求时决定用户应该“看到”(基于当前场景或上下文) .
在 ASP.Net Web Forms 中, ASPX 页面决定用户在发出请求时应“看到”的内容 .
ASPX
但是在 Web API 中,任何Web API的功能都没有控制权/权力来决定用户在发出请求时应该“看到”的内容 .
Web API不仅仅是与网站捆绑在一起的技术 . 它可以用于多种用途 - 不仅仅是网站 . 所以它不知道 rendering 的含义
rendering
Further Reading
Planning Web Solutions Today: Web Forms, ASP.NET MVC, Web API, and OWIN.
WCF or ASP.NET Web APIs? My two cents on the subject
The Next Generation of .NET – ASP.NET vNext
Getting Started with ASP.NET MVC 6
MVC控制器派生自控制器类 . 在Mvc中,您可以返回视图 . Mvc achitecture用于创建应用程序 . 但是,Web apis用于向各种应用程序提供数据 .
Web Api从Api控制器驱动,它不返回视图 .
注意:您还可以从MVC控制器创建Web Api,但您需要将结果作为JsonResult或其他支持Web api的返回类型返回 .
除了这里已经提供的答案之外,值得注意的是任何从ApiController继承并且具有Http动词POST动作的控制器只能有一个[FromBody]输入参数 . 如果使用MVC控制器(从'Controller'派生),您可以拥有许多后置输入参数 .
4 回答
基本上,
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技术 . 微软称之为
vNext
.UPDATE: 对于ASP.NET Core,Web API已集成到MVC 6项目类型中,
ApiController
类已合并到Controller
类中 . 更多详情:https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6我的两分钱......
在 ASP.Net MVC 中 - MVC的
Controller
决定应该是什么View
- 即,控制器在他们发出请求时决定用户应该“看到”(基于当前场景或上下文) .在 ASP.Net Web Forms 中,
ASPX
页面决定用户在发出请求时应“看到”的内容 .但是在 Web API 中,任何Web API的功能都没有控制权/权力来决定用户在发出请求时应该“看到”的内容 .
Web API不仅仅是与网站捆绑在一起的技术 . 它可以用于多种用途 - 不仅仅是网站 . 所以它不知道
rendering
的含义Further Reading
Planning Web Solutions Today: Web Forms, ASP.NET MVC, Web API, and OWIN.
WCF or ASP.NET Web APIs? My two cents on the subject
The Next Generation of .NET – ASP.NET vNext
Getting Started with ASP.NET MVC 6
MVC控制器派生自控制器类 . 在Mvc中,您可以返回视图 . Mvc achitecture用于创建应用程序 . 但是,Web apis用于向各种应用程序提供数据 .
Web Api从Api控制器驱动,它不返回视图 .
注意:您还可以从MVC控制器创建Web Api,但您需要将结果作为JsonResult或其他支持Web api的返回类型返回 .
除了这里已经提供的答案之外,值得注意的是任何从ApiController继承并且具有Http动词POST动作的控制器只能有一个[FromBody]输入参数 . 如果使用MVC控制器(从'Controller'派生),您可以拥有许多后置输入参数 .