ASP.NET MVC与ASP.NET Web API的区别
- MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据
- Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式
- Web API支持Self Host,MVC目前不支持
- Web API通过不同的http verb表达不同的动作(CRUD),MVC则通过Action名字表达动作
- Web API内建于ASP.NET System.Web.Http命名空间下,MVC位于System.Web.Mvc命名空间下,因此model binding/filter/routing等功能有所不同
- Web API非常适合构建移动客户端服务
https://www.zhihu.com/question/46369458/answer/144963042
首先要重点说的是,Web API是一种无限接近于RESTful风格的轻型框架,且不是微软提出来的,微软在.NET上实现了这中框架—http://Asp.Net Web API,所以“微软包装”是一个极大的偏见。
就应用市场时间而论,MVC普及市场的时间比Web API时间早。为什么MVC提出来了,且都被大家公认是一种经典的web站点实现架构,为什么还要搞Web API呢?
这两年什么炒得最火热?互联网。在网络技术不断更新和替代的过程,网络不断普及。互联网产品只要你有技术,就可以做。但要说明的是,互联网产品的用户不再是一小部分人群,除了潜在用户,你需要面对的是庞大的上网人群和开发者。这时候你要考虑你的WEB服务器是否能够支持这么多的用户,节省一点点传输数据的带宽都能够让你的服务器轻松不少,除此之外,你还要考虑你的潜在用户变成你的真实用户的某刻时刻,你的服务器是否能够顺利支撑。
面对用户,你要考虑你的产品是否能够让用户使用起来感觉很“爽”,你要把用户体验放在首位,那么你的产品首先功能上必须稳定,不然即使有再好的创意,再耐心的用户总会使用其它产品替代你的产品。
面对开发者,你想要把某些功能开放,这时候你必须要开放某些接口。有人会说,我也可以使用MVC来开放这些接口,没错是可以,但是绕远道给你带来的是更大的代价。
Web API 和 MVC可以说是两个不同的东西。Web API更倾向于基于HTTP协议的服务,直接返回用户的数据请求。MVC是建站的一种框架,倾向于返回用户的页面请求。
我总结了以下 http://ASP.NET Web API 的特性,更能说明Web API是一种数据请求框架:
- http://ASP.NET Web API 可以根据请求报文来返回的相应数据格式。包括JSON和XML。
- http://ASP.NET Web API 单独做数据请求和MVC做页面请求可以让Web前端和后台更好的解耦,减少开发难度。
- Web API 可以更好地用在移动端网页、桌面端网页或者桌面程序。
- Web API 的宿主可以选择多样:WebHost,,ConsoleHost,甚至是windows Services。
类似可以理解成ashx和webform的区别
"WebApi和MVC有什么区别?"
首先要重点说的是,Web API是一种无限接近于RESTful风格的轻型框架,且不是微软提出来的,微软在.NET上实现了这中框架—http://Asp.Net Web API,所以“微软包装”是一个极大的偏见。
我在公司经历了从 MVC 转到 “Web API + 其他框架”的过程,为什么要这么做?
从需求的根本上来看,业务的布局和扩张导致是根本原因。我们要求,数据库数据不只能够对 Web 程序服务,对其他业务也行,甚至可以根据数据接口开放给第三方。例如,MVC 业务中,可以在前端用AJAX获取和更新数据,也可以在后台用 HttpClient, 调用的方式不限,数据格式完全由调用方决定(XML 和 JSON 也是足够了)。
为什么不用 MVC 来做?
MVC 框架负责的东西太多了,我们可以说它是一个重量级的框架,因为它负责了数据接口,逻辑运算和View层的显示,为了减少 Controller 层的代码量,我们甚至还在三层架构上加了 DAL 和 BLL 层。除此之外,MVC 只能运行在 IIS 和 新出来的 DotNetCore 中,宿主选择比较少。
Web API 和 MVC可以说是两个不同的东西。Web API更倾向于基于HTTP协议的服务,直接返回用户的数据请求。MVC是建站的一种框架,倾向于返回用户的页面请求。
我总结了以下 http://ASP.NET Web API 的特性,更能说明Web API是一种数据请求框架:
- http://ASP.NET Web API 可以根据请求报文来返回的相应数据格式。包括JSON和XML。
- http://ASP.NET Web API 单独做数据请求和MVC做页面请求可以让Web前端和后台更好的解耦,减少开发难度。
- Web API 可以更好地用在移动端网页、桌面端网页或者桌面程序,调用方更加多样化。
- Web API 的宿主可以选择多样:WebHost,,ConsoleHost,甚至是windows Services。
增增删删写了蛮多,后来发现可以用一张图和两段话来概括。而其他一些概念和功能上的异同(view还是json,xml,内容协商等)网上随便一搜也有,或者推荐看看蒋金楠的两本框架揭秘。
使用上区分,mvc主要用于建站,web api主要用于构建http服务,当然你非要用mvc来构建Uri式的Api也行,不过显然是没有这个必要的,一个不恰当的比喻就像是你也可以玩破解版的单机游戏,也可以通过平台进行联机,但是始终不如steam上来得爽是吧。自身实现上区分的话,两种框架主要是在Asp .Net的基础上进行改造,主要是对HttpModule和HttpHandler做了扩展,实现方法是不一样的,比如说前者更像是在一层上建了第二层,引伸出更强大的路由机制,实现了诸如MvcHandler和ControllerFactory这种消息处理和后台控制器方法选择机制,Web Api除了扩展了前者以外,另外写出了一套独立的,独立于Asp .Net的消息处理管道,就像是借鉴原来房子的模型,重新设计出了另外一套别墅。这也很好地解释了为什么Web Api可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式,这和WCF是相似的。而MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。何况它们两者虽然都有Controller和Action,但是请求的实现和响应的回复机制也是不同的,比如说Web Api处理消息有两个核心类是HttpRequestMessage和HttpResponseMessage。这两种框架最多只能说是模式上类似,实现上还是有很大差别的。不过两者都是Asp .Net的组成成员,图上表现得很清楚了。