MVC和Webapi的区别

2019-08-20 11:18:17 浏览数 (1)

从使用上区分

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更加轻量的架构。

0 人点赞