WebAPI-HTTP编程模型

简介: 它是什么?它包含什么?它能干什么?

带着问题去思考,大家好!

它是什么?它包含什么?它能干什么?

消息

HTTP编程模型的核心就是消息抽象,表示为:HttPRequestMessage,HttpResponseMessage.用于客户端和服务端之间交换请求和响应消息。

HttpMethod类包含了一组静态属性:

privatestaticreadonly HttpMethod getMethod = new HttpMethod("GET");         privatestaticreadonly HttpMethod putMethod = new HttpMethod("PUT");         privatestaticreadonly HttpMethod postMethod = new HttpMethod("POST");         privatestaticreadonly HttpMethod deleteMethod = new HttpMethod("DELETE");         privatestaticreadonly HttpMethod headMethod = new HttpMethod("HEAD");         privatestaticreadonly HttpMethod optionsMethod = new HttpMethod("OPTIONS");         privatestaticreadonly HttpMethod traceMethod = new HttpMethod("TRACE")

标头

  • HttpRequestHeaders:包含请求标头
  • HttpResponseHeaders:包含响应标头
  • HttpContentHeaders:包含内容标头

 

消息内容

HttpContent包含了非虚拟公共方法

  • Task<string> ReadAsStringAsync()
  • Task<byte[]> ReadAsByteArrayAsync()
  • Task<Stream> ReadAsStreamAsync()
  • Task CopyToAsync(Stream stream, TransportContext context)

第一种方式用于推送方式访问原始的消息内容。将一个流传递给CopyAsync方法,然后把消息内容推送到这个流中

using(car client=new HtppClient()) {     var response=           await client.GetAsync("",HttpCompletionOption.ResponseHeadersRead); response.EnsureSuccessStatusCode();var ms=new MemorySteam();await response.Content.CopyToAsync(ms); Assert.True(ms.Length>0); }

也可以使用ReadAsStreamAsync().拉取方式访问。这个方法异步返回一个流

using(var client=new HttpClient())             {                 var response = await client.GetAsync("");                 response.EnsureSuccessStatusCode();                 var steam = await response.Content.ReadAsStreamAsync();                 var buffer = newbyte[2 * 1024];                 var len = await steam.ReadAsync(buffer, 0, buffer.Length);                             }

ReadAsStringAsync和ReadAsByteArrayAsync-异步提供消息内容的缓冲副本。ReadAsStringAsync返回原始的字节内容,ReadAsByteArrayAsync将内容解码为字符串返回

当然也可以扩展为

public override Task<object> ReadContentAsync(HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters, IFormatterLogger formatterLogger)

 

相关文章
|
4天前
|
Go 开发者
Golang深入浅出之-HTTP客户端编程:使用net/http包发起请求
【4月更文挑战第24天】Go语言的`net/http`包在HTTP客户端编程中扮演重要角色,但使用时需注意几个常见问题:1) 检查HTTP状态码以确保请求成功;2) 记得关闭响应体以防止资源泄漏;3) 设置超时限制,避免长时间等待;4) 根据需求处理重定向。理解这些细节能提升HTTP客户端编程的效率和质量。
15 1
|
2月前
|
JSON 编解码 Go
Golang中http编程
Golang中http编程
26 2
|
11月前
|
移动开发 应用服务中间件 Linux
35.从入门到精通:Python CGI编程 什么是CGI 网页浏览 CGI架构图 Web服务器支持及配置 第一个CGI程序 HTTP头部
35.从入门到精通:Python CGI编程 什么是CGI 网页浏览 CGI架构图 Web服务器支持及配置 第一个CGI程序 HTTP头部
|
11月前
|
C#
【C#编程最佳实践 二十二】如何发送带有重试机制的Http请求
【C#编程最佳实践 二十二】如何发送带有重试机制的Http请求
114 0
【C#编程最佳实践 二十二】如何发送带有重试机制的Http请求
|
JSON 监控 Java
【Java技术指南】「Unirest编程专题」一起认识一下一个“灰常”优秀的Http工具,让Http开发变得如此简单
Unirest-Java是一个轻量级的HTTP客户端库,它提供了简单易用的API,可以帮助Java开发人员快速地发送HTTP请求和处理响应。在本文中,我们将深入探讨Unirest-Java的技术细节和使用方法。
206 1
|
存储 数据采集 网络协议
Linux网络原理与编程(2)——第十二节 应用层协议(以HTTP为例)
协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的。更准确点来说,收发是按照比特位的形式进行的。
180 0
Linux网络原理与编程(2)——第十二节 应用层协议(以HTTP为例)
|
存储 Go 网络架构
Go HTTP 编程 | 02 - net/http 包剖析
Go HTTP 编程 | 02 - net/http 包剖析
Go HTTP 编程 | 02 - net/http 包剖析
|
Go 网络架构
Go HTTP 编程 | 01 - 使用 http 包创建 Web 服务器
Go HTTP 编程 | 01 - 使用 http 包创建 Web 服务器
Go HTTP 编程 | 01 - 使用 http 包创建 Web 服务器
http详解笔记学习9-socket编程怎么发送get请求-1
http详解笔记学习9-socket编程怎么发送get请求-1
74 0
http详解笔记学习9-socket编程怎么发送get请求-1
|
中间件 Go 网络架构
Go Web 编程入门:HTTP 自定义路由
Go 语言提供功能丰富的 net/http,实现了基础的 HTTP 中的 client 和 server 功能。在这一篇文章也有介绍一个基础的 HelloWorld 应用。
Go Web 编程入门:HTTP 自定义路由