Asp.net MVC 与 Asp.net Web API 区别

https://www.cnblogs.com/viktor988/

https://www.cnblogs.com/terry283618366/articles/5760297.html

https://www.cnblogs.com/cjm123/p/8067109.html
需要多学习一些东西才可以. 
在我们开发一些web应用时,我们一样可以在MVC Framework 中使用JsonResult 来返回JSON数据,同样也可以处理一下简单的AJAX请求,那么为何微软又推出Web API这么个东西呢?接下来我们来比较一下。二者(Asp.net MVC 与 Asp.net Web Api)何时用?
 
1、Asp.net MVC 是用来创建返回视图(Views)与数据的Web应用,而Asp.net Web API是一种简单轻松地成熟的HTTP服务,它只返回数据,不返回视图(Views)。
2、Asp.net Web API可以通过.Net Framework来帮助我们构建REST-ful服务,而且他支持内容协商(根据客户端能接受的格式要求,返回相应的JSON,XML,ATOM),同时Asp.net Web API支持自我宿主(self-hosting),而MVC并不支持(只能宿主在IIS中)。

3、Asp.net Web API可以返回特定的数据类型,比如JSON,XML,或者其他在请求头中定义的数据格式。而MVC只能利用Json Result返回JSON数据类型。

4、Asp.net Web API 根据HTTP 谓语动词来映射Action,但MVC只是映射 Action 名称。

5、Asp.net Web API 一种全新的框架,它是Asp.net Framework 核心库的一部分。在Asp.net Web API 一些存在MVC中的特征(model binding、filters、路由)是存在System.Web.Http程序集中,而MVC是存在System.Web.Mvc中。因此,Web API 可以和Asp.net一起使用,也可以做独立的服务层。

6、如果在一个项目中融合Web API和MVC controller,用于处理复杂AJAX请求,这些请求可能返回JSON,XML或者其他数据格式。这就是Web API 自我宿主(Web API self-hosting)。

7、如果融合MVC和Web API 控制器(controller),而且需要集成认证,这时,需要创建两个过滤器(Filters),一个MVC的,另一个Web API的,因为他们两个是不相同的。

8、总之,WebApi在提供数据方面,是比MVC更加轻量的架构。

  

第二个说明文档:

.WebApi
webapi有自己的路由。

webservice和wcf的协议都是soap协议,数据的序列化和反序列化都是soap的格式。而webapi是Json的数据传递

webapi的优点有哪些?

()非常适合做http的请求,前端与webapi交互特别方便

()webapi更轻量因为使用的json数据来传递。

()webapi很多时候是给前端提供数据的,因为webapi跟控制器关联的没那么紧密(若是没webapi,用mvc的模式,那么页面直接从对应的控
制器获取数据),这样传递数据webapi对,手机,app,页面都可以通过同一个数据源提供数据,会比较灵活一些。(会跨域)

.mvc 和WebApi:
区别:
a.MVC是建立网站的一种框架,倾向于返回用户的页面请求;webApi倾向于返回用户数据请求
b.mvc直接继承system.mvc.controller;webapi继承的是system.web.http.ApiController
c.mvc只能部署在iis上;webapi可以寄宿在不同的宿主上,如:Web Host、Self Host方式
d.接收参数方式不一样,
e.mvc可以返回JsonResult,前端可以直接用;webapi要返回json数据,必须json.parse()转化(Maticsoft.Json.dll)
f.webapi必须添加webapi控制器,然后改成继承ApiController,否则是无效的webapi

WebApi和MVC的区别

 
使用上区分,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的组成成员,图上表现得很清楚了。

 
首先,两者的主要解决的问题不同!
MVC的主要使用场景在于Web站点的开发,他在后端实现了一套完整的MVC开发框架,能提供方便的页面开发,默认使用Razor视图引擎,提供了后端html构造,用户可以方便地开发出带页面的站点。
而WebAPI主演提供了一套RestfulAPI的开发框架,提供了较为完整的http语义支持,主要用来做开放API,更抽象,更不注重View的生成。
从实现的角度看,虽然他俩捆绑在一起,但是两者处理管线还是不同的。
如果你对http有较为深入理解后,你就会发现,其实他俩的界限没那么明显,那么你也许会觉得mvc做的事webAPI都能做,因为他更抽象,有时候你又不想把两者的界限搞得那么清晰
 

[转帖]Asp.net MVC 与 Asp.net Web API 区别的更多相关文章

  1. ASP.NET MVC 提供与访问 Web Api

    ASP.NET MVC 提供与访问 Web Api 一.提供一个 Web Api 新建一个项目,类型就选 "Web Api".我用的是MVC5,结果生成的项目一大堆东西,还编译不过 ...

  2. ASP.NET MVC 4 (十二) Web API

    Web API属于ASP.NET核心平台的一部分,它利用MVC框架的底层功能方便我们快速的开发部署WEB服务.我们可以在常规MVC应用通过添加API控制器来创建web api服务,普通MVC应用程序控 ...

  3. asp.net MVC中实现调取web api

    public ActionResult Index(string city) { if (string.IsNullOrEmpty(city)) { city = "上海"; } ...

  4. 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理

    第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能. 系列文章 七天学会ASP.NET M ...

  5. 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递

    通过第一天的学习之后,我们相信您已经对MVC有一些基本了解. 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容.本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV ...

  6. ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题

    首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

  7. 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性

    [索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...

  8. 既生瑜何生亮?ASP.NET MVC VS ASP.NET Web API

    Asp.net MVC 与 Asp.net Web API 区别 在我们开发一些web应用时,我们一样可以在MVC Framework 中使用JsonResult 来返回JSON数据,同样也可以处理一 ...

  9. MVC项目实践,在三层架构下实现SportsStore-09,ASP.NET MVC调用ASP.NET Web API的查询服务

    ASP.NET Web API和WCF都体现了REST软件架构风格.在REST中,把一切数据视为资源,所以也是一种面向资源的架构风格.所有的资源都可以通过URI来唯一标识,通过对资源的HTTP操作(G ...

随机推荐

  1. 002_linux之点灯(汇编深度解析)

    1.      开发板采用韦山东的开发板 2.      芯片CPU三星S3C2440A 3.  控制引脚:GPF4 4.  linux操作系统 5. 芯片手册下载地址:https://eyun.ba ...

  2. Activiti服务类- RuntimeService服务类

    一共89个接口1.启动流程实例(20个方法)//使用给定的键在流程定义的最新版本中启动一个新的流程实例.ProcessInstance startProcessInstanceByKey(String ...

  3. 使用 ALinq 实现 Linq to MySQL【转】

    http://www.cnblogs.com/huangcong/archive/2011/05/24/2055204.html

  4. SharePoint學習

    1.SharePoint 2010 Products -> SharePoint 2010 Products Configuration Wizard    配置好后,系統會自動在localho ...

  5. 复杂查询 new EntityWrapper<>()

    添加查询条件 https://www.cnblogs.com/okong/p/mybatis-plus-guide-one.html (通用) https://www.jianshu.com/p/ce ...

  6. [USACO17JAN] 晋升者计数 dfs序+树状数组

    [USACO17JAN] 晋升者计数 dfs序+树状数组 题面 洛谷P3605 题意:一棵有点权的树,找出树中所有\((u,v)\)的对数,其中\(u,v\)满足\(val(u)\le val(v)\ ...

  7. python3实现互信息和左右熵的新词发现--基于字典树

    字典树 原来讲明白了剩下的就是具体实现了,最适合存储和计算词频的数据结构就是字典树,这里给一个讲解的很清楚的链接 具体代码 代码已开源,需要的点击这个Github

  8. nginx下载 并将vue项目部署上去

    这是一个比较全的nginx配置说明:新手可以先忽略,直接往下看:https://www.cnblogs.com/findbetterme/p/11289273.html nginx官网下载地址:htt ...

  9. cesium billboard跨域问题1

    群里小伙伴问道使用billboard加载图片时出现跨域问题,一般认为在服务器端设置 Access-Control-Allow-Origin: * 例如用tomcat发布图片服务,可以这样设置:http ...

  10. Axure实现提示文本单击显示后自动消失的效果

    Axure实现提示文本单击显示后自动消失的效果 方法/步骤     如图所示,框出的部分为提示文本(已经命名为tooltip),希望达到的效果是默认加载时不显示,点击帮助图标后显示,且2秒后自动消失. ...