从使用上区分
Mvc主要用于构建网站,在后端实现了一套完整的MVC开发框架,默认使用Razor视图引擎。
Webapi主要用于构建Restful服务,提供了较为完整的http语义支持,主要用来做开放API,更抽象,更不注重View的生成。
从自身实现上区分
两种框架主要是在Asp.Net的基础上进行改造,主要是对HttpModule和HttpHandler做了扩展,但是实现思路不一样。
Mvc像是在一层上建了第二层,引伸出更强大的路由机制,实现了诸如MvcHandler和ControllerFactory这种消息处理和后台控制器方法选择机制。
Webapi除了扩展了前者以外,另外写出了一套独立的,独立于Asp.Net的消息处理管道,就像是借鉴原来房子的模型,重新设计出了另外一套别墅。
因为实现上的差异,导致的结果就是MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。
WebApi可以部署在IIS里,也可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式,这和WCF是相似的。
何况它们两者虽然都有Controller和Action,但是请求的处理和响应的回复机制也是不同的,比如说Web Api处理消息有两个核心类是HttpRequestMessage和HttpResponseMessage。
这两种框架最多只能说是模式上类似,实现上还是有很大差别的。
从部署角度区分
MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。
WebApi可以部署在IIS里,也可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式,这和WCF是相似的。
从资源返回类型区分
WebAPI支持内容协商(根据客户端能接受的格式要求,返回相应的JSON,XML,ATOM等格式)。
MVC只能利用Json Result返回JSON数据类型。
从路由角度区分
Web API根据HTTP谓语动词来映射Action,但MVC只是映射Action名称。
从代码角度区分
mvc代码在System.Web.Mvc中,Controller继承System.Mvc.Controller
webapi代码在System.Web.Http程序集中,Controller继承的是System.web.http.ApiController
WebApi在提供数据方面,是比MVC更加轻量的架构。