博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebApi系列(从.Net FrameWork 到 .Net Core)
阅读量:5981 次
发布时间:2019-06-20

本文共 1912 字,大约阅读时间需要 6 分钟。

一. 简介

 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]总之很麻烦)

  

三. 系列章节

   

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

       

 

 

 

!

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

转载于:https://www.cnblogs.com/yaopengfei/p/10168885.html

你可能感兴趣的文章
Linux服务器的那些性能参数指标
查看>>
BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
查看>>
c++ 11开始语言本身和标准库支持并发编程
查看>>
.NET Core 之 MSBuild 介绍
查看>>
iOS:即时通讯之<了解篇 SocKet>
查看>>
@EnableTransactionManagement注解理解
查看>>
《JavaScript高级程序设计》读书笔记(十):本地对象Date
查看>>
linux中fork()函数详解
查看>>
从1G到5G,46年屏幕变迁下,富士康、苹果、三星、华为的浴火重生路 ...
查看>>
##II 第四单元##管理系统中的简单分区和文件系统
查看>>
用flash测试你的ircd
查看>>
白话红黑树系列之二——红黑树的构建
查看>>
客户的一张表中出现重复数据,而该列由唯一键约束,重复值如何产生的呢?...
查看>>
MySQL5.6中新增特性、不推荐使用的功能以及废弃的功能
查看>>
OnePlus安装Kali-NetHunter
查看>>
[Oracle][DataGuard]Standby数据库文件有损坏时的处理方法
查看>>
JavaScript:Array 对象
查看>>
PDFCreator:一款免费,开源的PDF(Tiff,pcx,png,jpeg,bmp,PS,EPS)打印机(VB,GPL),并提供了COM接口,方便使用各种编程语言调用...
查看>>
Note 1773479 - SYB: Displaying multiple triggers per object
查看>>
联手云计算核心技术开发,BoCloud与中科院软件所战略合作
查看>>