一. 简介

 1. 什么是WebApi?

  WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器、APP等)来构建Http服务的一个框架,它是一种RestFul风格的开发接口的技术,它比WebService更省流量,比WCF更简单。下图表示WebApi在.Net平台下的地位。

  简单分析:WebForms、MVC均为ASP.NET下的Web开发框架,WebAPI负责构建HTTP常规服务,SignalR负责构建实时服务。

  WebAPI和MVC简单对比一下:WebAPI是专注于接口开发,更专业,用户不会直接和WebApi打交道,因此WebApi也不会生成界面,当然我们完全可以使用MVC来开发接口,甚至一般处理程序(HttpHandler)

2. WebApi的功能特点

(1). 支持RestFul风格的的请求,即可以通过 Get、Post、Put、Delete请求CRUD操作,不需要暴露更多的API。

(2). 方法的返回值可以直接返回对象,专注于数据。

(3). 独立于IIS部署(selfhost、winform、控制台)。

(4). 方法可以直接声明为async。

(5). 支持MVC大部分功能,但和MVC在路由、Filter、ModelBinder等方面都有一些区别.(这里指.Net FrameWork)。

3. WebApi和MVC的区别

(1). MVC主要用来构建网站,所以既关心数据又关心页面,而WebApi主要用来构建接口,所以只关心数据。

(2). WebApi支持Self Host,即独立于IIS部署,MVC不支持。(.Net Core 下的MVC是支持的)

(3). WebApi通过请求方式来区分请求哪个接口,MVC则需要通过Action的名字来确定。

(4). WebApi位于System.Web.Http命名空间下,而MVC位于System.Web.Mvc命名空间下,所以二者在路由、Filter、ModelBinder等方面都有一些区别。

(5). WebApi更轻量更适合构建App的接口服务。

(6). Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式。

4. WebApi和WCF的取舍

(1). 如果服务需要支持One Way Messaging/Message Queue/Duplex Communication,选择WCF

(2). 如果服务需要在TCP/Named Pipes/UDP (wcf 4.5),选择WCF

(3). 如果服务需要在http协议上,并且希望利用http协议的各种功能,选择Web API

(4). 如果服务需要被各种客户端(特别是移动客户端)调用,选择Web API

二. Restful

 1. 什么是RestFul风格的接口?

(1).调用者不再根据方法名称区分请求方法,而是通过请求方式进行区分,将所有的操作都抽象成对资源的增删改查。

 即:新增用Post请求,查询用get请求,修改用put请求,删除用delete请求。

(2).请求的路径中将不在出现方法名称

(3).用Http的返回状态码表示服务器端的处理结果,eg:找不到用404、没有权限返回201,不在需要自己约定状态码。

(4).有利于系统优化,浏览器可以自动缓存Get请求。

2. RestFul风格的弊端

  理论性太强,很容易把初学者搞晕,比如 如何通过状态码区分是"账号错误"还是"密码错误"? 比如"登录"属于什么操作?再比如 一个控制器里有两个方法 GetM1() 和 GetM2(), 两个方法中都没有参数值,这种情况如何通过请求方式来区分呢?再比如 下面的GetStudets(string str) 和 GetTeachers(string str) 方法,参数名都是str,所以无法区分(可以把其中一个参数名改为str2,就不冲突了,或者通过别的路由规则声明一下,或者给标注个非Get请求的标记,比如[HttpPost]总之很麻烦)

三. 系列章节

  

       第一节:WebApi的纯原生态的RestFul风格接口和路由规则介绍

       第二节:如何正确使用WebApi和使用过程中的一些坑

       第三节:总结.Net下后端的几种请求方式(WebRequest、WebClient、HttpClient)

       第四节:跨域请求的解决方案和WebApi特有的处理方式

       第五节:WebApi的三大过滤器

       第六节:WebApi的部署方式(自托管)

       第七节:WebApi与Unity整合进行依赖注入和AOP的实现

       第八节:常见安全隐患和传统的基于Session和Token的安全校验

       第九节:JWT简介和以JS+WebApi为例基于JWT的安全校验

       第十节:进一步扩展两种安全校验方式

       第十一节:WebApi的版本管理的几种方式

       第十二节:WebApi自动生成在线Api文档的两种方式

       第十三节:XXXX

       第十四节:XXXX

       第十五节:XXXX

       第十六节:XXXX

 

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 

WebApi系列(从.Net FrameWork 到 .Net Core)的更多相关文章

  1. ASP.NET Core 2.2 WebApi 系列【九】使用SignalR (作者:tenghao510 ) 学习及内容补充

    原文地址:  ASP.NET Core 2.2 WebApi 系列[九]使用SignalR 今天,看到了大牛的这篇博文,  发了一下评论, 我很惊喜, 没想到他很快就回复了我,  而且通过QQ帮助了S ...

  2. .net core系列之《.net平台历程介绍以及.net framework和.net core对比》

    一..Net平台的背景 1.2010之前 的PC时代的时候,互联网规模还不是特别庞大,以静态编译式语言为代表的JAVA和.Net没什么太大区别,.net以windows自居. 2.2010年以JAVA ...

  3. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  4. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  5. 【WebApi系列】详解WebApi如何传递参数

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  6. 21.翻译系列:Entity Framework 6 Power Tools【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/entity-framework-power-tools.aspx 大家好,这里就是EF ...

  7. 9.翻译系列:EF 6以及EF Core中的数据注解特性(EF 6 Code-First系列)

    原文地址:http://www.entityframeworktutorial.net/code-first/dataannotation-in-code-first.aspx EF 6 Code-F ...

  8. 9.4 翻译系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)

    原文链接:http://www.entityframeworktutorial.net/code-first/notmapped-dataannotations-attribute-in-code-f ...

  9. NET?.NET Framework?.NET Core?

    什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...

随机推荐

  1. 【Spring Cloud笔记】Eureka注册中心增加权限认证

    在Spring Cloud通过Eureka实现服务注册与发现时,默认提供web管理界面,但是如果在生产环境暴露出来,会存在安全问题.为了解决这个问题,我们可以通过添加权限认证进行控制,具体步骤如下: ...

  2. win10 桌面设置为远程桌面

    查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...

  3. Windonws基本命令手册

    1. gpedit.msc-----组策略  2. sndrec32-------录音机 3. Nslookup-------IP地址侦测器 4. explorer-------打开资源管理器 5. ...

  4. python之三行代码发送邮件

    (1)首先进入cmd,输入pip install yagmail (2)思路:1 .连接服务器:yagmail.SMTP(邮箱账号,邮箱密码,邮箱服务器地址,邮箱服务器端口) 2 .准备正文内容:co ...

  5. ios copy和strong,浅拷贝和深拷贝

    copy@property (nonatomic, copy) NSString *name;self.name = mutableString;这时,name对mutableString一个深拷贝, ...

  6. SQL 游标的使用

    适用场景:对查询出的结果集遍历,作用类似于其他语言的列表循环语句. 相关语法: --定义游标 DECLARE cr CURSOR FOR( SELECT Cust_ID ,Cust_Name ,IDC ...

  7. 特殊需求:EF 6.x如何比较TimeSpan格式的字符串?EF Core实现方式是否和EF 6.x等同?

    前言 我们知道C#中的TimeSpan对应SQL Server数据库中的Time类型,但是如果因为特殊需求数据库存储的不是Time类型,而是作为字符串,那么我们如何在查询数据时对数据库所存储的字符串类 ...

  8. jQuery 模拟操作

    1.常用模拟 有时,需要通过模拟用户操作,来达到单击的效果.例如在用户进入页面后,就触发 click 事件,而不需要用户去主动单击.在 jQuery 中,可以使用 trigger() 方法完成模拟操作 ...

  9. windows系统下的特殊目录导致的FileNotFoundException

    环境:下面只有JDK(内含jre),没有外在的jre 读取的两个文件都是存在的,只是文件名不同 运行结果1 运行结果2 切换JDK 运行结果3: 运行结果4: 请留意:C:\windows\syste ...

  10. VBS 备份文件

    http://www.cnblogs.com/top5/archive/2009/11/17/1604767.html 参考上面的博客 ' =============== 局域网文件自动备份 VBS ...