一. 简介

 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文档的两种方式

       第十三节:Asp.Net Core WebApi基础总结和请求处理

       第十四节:Asp.Net Core WebApi生成在线文档

       第十五节:Asp.Net Core WebApi路由规则

       第十六节:XXXX

 

!

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

标签智能推荐:

.net core 3.1仓储架构搭建和autofac注入框架使用入门

  1.创建空项目如test20220218  2.创建四个类库.netcore3.1 名称分别为WebApi.Core.IRepositoryWebApi.Core.RepositoryWebApi.Core.IServiceWebApi.Core.Service  3.创建一个webapi.netcore3.1项目&nbsp

MVC中未能加载程序集System.Web.Http/System.Web.Http.WebHost

AspNet.WebApi版本是否最新,System.Web.Http这个命名空间需要更新WebApi版本。报错:未能加载程序集System.Web.Http/System.Web.Http.WebHostNuGet>程序包管理器控制台:没有的话,需要安装:Install-PackageMicrosoft.AspNet.WebApi有的话,需要更新:Update-PackageMicroso

bridge桥接模式

core.webapi为列dockerrun--net=my_net-p3306:3306-d--namemysql-eMYSQL_ROOT_PASSWORD=123456--restart=alwaysmysqldockerrun--net=my_net-p9999:9999--nameqs.core.webapi-dqs.core.webapi:124如果容器已运行使用以下方式dockerne

.net core使用Jenkins自动部署

rse--shortHEAD`dockerstopqs.core.webapidockerrmqs.core.webapidockerimages|grep"qs.core.webapi"|awk'{print$1":"$2}'|xargsdockerrmiecho---------------BuildingDockerImage...------------------dockerbuild-

.NET Core/.NET5/.NET6 开源项目汇总3:工作流组件

守每个项目的开源协议后再使用。尊重知识产权,共建和谐开源社区。6、OpenAuth.Core【国产,入选GVP】OpenAuth.Core是大神李玉宝的又一著作,该项目目前收录于 dotNETChina ,并且被Gitee评选为GVP项目(Gitee最有价值的开源项目)。OpenAuth.Core是.NET权限管理及快速开发框架、最好用的权限工作流系统。源于MartinFowl

我的C#跨平台之旅(四):使用AOP(filter、attribute)进行系统增强

1、使用OData提速RESTAPI开发引入NuGet包:Microsoft.AspNet.WebApi.OData在启动类中添加如下配置(示例为全局配置,也可基于Controller或Action实现): 2、使用CORS实现跨域访问:引入NuGet包:Microsoft.AspNet.WebApi.Cors在启动类中添加如下配置(示例为全局配置,也可基于Controller或Acti

四:net core(.NET 6)使用Filter过滤器拦截webapi方法

 Filter的基本用法代码在最下方使用filter过滤器,来实现拦截接口信息。咱们先新建一个项目,在原有的webapi上面,选择添加项目,添加一个类库项目:我起个名字,就叫 Wsk.Core.Filter:然后,我们把自带的控制器删除掉,咱们手撸一个。以下是要删掉的部分:然后新建一个api控制器,例如叫 WSKController然后,新建一个webapi方法,例如

.NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目

FastHttpAp框架开发。前后端分离,完全脱离后端视图引擎;基于vuejs和webapi模式。混合HTTP和Websocket,当浏览器兼容Websocket的情况下请求会使用Websocket。基于javascript前端Markdown,降低文章在服务端解释的损耗。支持HTTPS满足安全访问的需求。javascriptasync/await对访问的浏览器要求比较高,旧版本浏览器可能无法查看

使用 .net WEBAPI 返回 application/json类型导致 IE8 提示下载

1,场景介绍项目使用了jquery.form.js这个插件,用ajax的方式提交form表单里面的信息。因为需要使用ajax获取到返回信息。数据录入使用的是.netmvc方式的webapi数据接口进行提交录入。2,问题在IE8及以下版本遇到,提交成功后,返回过来的数据格式是: application/json,在IE8(含)以下版本中直接提示下载该json。3,解决方法修改在系统中的Ap

Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案

,在MVC控制器中我们就可以接收JObject参数了。七、WebAPI添加自定义参数绑定HttpParameterBinding不知道微软搞什么鬼,WebApi的参数绑定机制跟Mvc的参数绑定有很大的不同,首先WebApi的绑定机制分两种,一种叫ModelBinding,一种叫Formatters,一般情况下ModelBinding用于读取querystring中的值,而Formatters用于读