转:https://www.cnblogs.com/yuchenghao/p/10598825.html

首先第一点:什么是WebAPI?

    首先我们了解一下.net framework 的框架构成,

    

    可以看到,WebAPI和mvc同属于B/S模板框架的一种,官方对于WebApi的定义是:WebAPI是一个框架,可以轻松构建HTTP服务,覆盖广泛的客户端,包括浏览器和移动设备,WebAPI是在.NetFramwork上构建RESTful程序的理想平台。

    这里有必要解释一下什么是RESTful: RESTful是一种设计风格,REST中的 get、post、put、delete来进行数据的增删改查,如果开发人员的应用程序符合RESTful原则,那他的服务可被称之为“Restful风格应用服务”

然后我们了解一下:为什么要使用WebAPI?

    在解释这个问题之前我们需要首先知道一下.net为外部提供接口的方式有哪些?

    答:WCF、WebServiceWebAp、一般处理程序。

      那来了解一下他们之间的区别:

        WebService

            1:基于soap协议,数据格式是xml、

            2:只支持http协议、

            3:不是开源的,但是可以被任意一个了解xml的人使用、

            4:只能部署在iis上。

        WCF

            1:基于soap协议,数据格式是xml、

            2:WCF是webservice的进化版,支持各种各样的协议,像TCP、http、https、NamedPipes、MSMQ等、

            3:不是开源的,但是可以被任意一个了解xml的人使用、

            4:可以部署在应用程序中、IIS上或者Windows服务中。

        WebAPI

            1:是一个简单的构建http服务的新框架、

            2:在.net平台上WebAPI是一个开源的、理想的、构建RESTful服务的技术、

            3:可以使用http的所有特点,(比如URIs、request/response头、缓存、版本控制、多种内容格式)、

            4:支持mvc的特性,像路由、控制器、action、fiter、模型绑定、控制反转、依赖注入、单元测试、

            5:可以部署在应用程序中、IIS上、

            6:是一个轻量级的框架,对各种终端的支持都很好、

            7:Response可以被webAPI的MediaTypeFormatter转换成json、XML或者任何你想转换的格式。

        一般处理程序

            一般处理程序其实就是和页面处理程序相区分开的,因为实现的是IhttpHandler接口,而且不需要继承自Page类。所以没有那么多的事件需要处理,不必消耗太多资源,所以性能方面要比aspx高。

那么回到这个问题,为什么要使用WebApi?

        当你遇到下面这些情况的时候,就可以考虑使用webAPI来构建你的服务了;

            1:需要webservice但是不需要soap、

            2:需要在已有的WCF服务基础上建立non-soap-based http服务、

            3:只想发布一些简单的http服务,不想使用相对复杂的wcf配置、

            4:发布的服务会被限制带宽的设备访问、

            5:希望使用开源框架,关键时刻可以自己调试或者自定义一下框架。

最后总结一下WebAPI和MVC之间的区别:WebAPI和MVC之间有什么区别?

        相信使用过mvc和webapi的同学都会觉得这两者太相似了,使用起来也差不多,但是既然是两个框架,那肯定是有区别的,我对WebAPI和MVC的区别做了一下总结:

            1:MVC主要是用来构建网站的,既关心数据也关心页面展示,而WebAPI只关心数据、

            2:WebAPI支持格式协商,客户端可以通过Accept header通知服务器期望的格式、

            3:WebApi支持Self Host,MVC目前不支持、

            4:WebAPI通过不同的http verb表达不同的动作(CRUD),MVC则通过Action名字表达动作、

            5:WebAPI内建于System.Web.Http 命名空间下,而MVC位于Systm.Web.Mvc命名空间下,因此路由等有些许不同、

            6:WebAPI非常适合构建移动客户端服务。

(转)C#进阶之WebAPI的更多相关文章

  1. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...

  2. C#进阶系列——WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

  3. C#进阶系列——WebApi 接口测试工具:WebApiTestClient

    前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点多,每 ...

  4. C#进阶系列——WebApi 跨域问题解决方案:CORS

    前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题.本篇主要从实例的角度分享下CORS解决跨域问题一些细节. WebApi系列文章 C#进阶系列— ...

  5. C#进阶系列——WebApi 身份认证解决方案:Basic基础认证

    前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...

  6. C#进阶系列——WebApi 异常处理解决方案

    前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定不陌生,记得在介绍 AOP 的时候 ...

  7. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?

    前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...

  8. 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解

    原文地址:http://www.cnblogs.com/landeanfen/archive/2016/04/06/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参 ...

  9. C#进阶系列——WebApi 跨域问题解决方案:CORS(转载)

    C#进阶系列——WebApi 跨域问题解决方案:CORS   阅读目录 一.跨域问题的由来 二.跨域问题解决原理 三.跨域问题解决细节 1.场景描述 2.场景测试 四.总结 正文 前言:上篇总结了下W ...

  10. [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解

    本文转自:http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_2 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作 ...

随机推荐

  1. Linux目录机构及目录管理

    Linux的目录结构与目录管理 Linux目录结构: 1 目录创建规则 FHS 文件系统层次化标准 指定Linux操作系统哪些目录必须具备 /boot /bin /sbin /etc /sys /pr ...

  2. import cv2 报错:ModuleNotFoundError: No module named 'cv2'

    tensorflow,import cv2报错:ModuleNotFoundError: No module named 'cv2' 我是这样解决的:conda install opencv 然后不报 ...

  3. JVM 之类加载器

    一.什么是 JVM JVM(Java Virtual Machine)是一个可以执行 Java 字节码文件(即 .class 文件)的虚拟机进程.当 Java 源文件能被成功编译成 .class 文件 ...

  4. 运维DNS原理配置

    Linux DNS原理简介及配置 DNS简介 DNS原理 域名解析的过程 资源记录 DNS BIND安装配置 一.简介 一般来讲域名比IP地址更加的有含义.也更容易记住,所以通常用户更习惯输入域名来访 ...

  5. export ,export default 和 import 区别以及用法

    首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...

  6. 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写

    1. 首先我们按照List或数组等处理方式来处理Map,看看效果 1.1 在服务端的接口中添加以下方法 /** * 查询所有班级信息加上对应的学生列表 * * @return */ public Ma ...

  7. 016-zabbix低级自动发现以及MySQL多实例

    1.概述 Zabbix的网络发现是指zabbix server通过配置好的规则,自动添加host,group,template Zabbix的主动注册刚好和网络发现是相反的,功能基本一致.zabbix ...

  8. Codeforces 964 等比数列逆元处理 贪心删偶数度节点

    A B C 注意sum要在mod范围内 且不能用/a*b来推 #include<bits/stdc++.h> using namespace std; typedef long long ...

  9. DECLARE_GLOBAL_DATA_PTR

    DECLARE_GLOBAL_DATA_PTR在arch/arm/include/asm/global_data.h中定义 #include <asm-generic/global_data.h ...

  10. php基于websocket实现的在线聊天室

    听说websocket技术可以实现 1.