博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.Net Web API 2第四课——HttpClient消息处理器
阅读量:4983 次
发布时间:2019-06-12

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

Asp.Net Web API 导航

    Asp.Net Web API第一课:入门

      Asp.Net Web API第二课:CRUD操作

      Asp.Net Web API第三课:.NET客户端调用Wep API 

前言

消息处理器是一个接收HTTP请求,并返回HTTP响应的一个类。

比较有代表性的时,一系列的消息处理被链接在一起。第一个处理器接收HTTP请求,做一些处理,然后将此请求传给下一个处理器。在某个点上,这个响应被创建,被进行回溯。这种模式就叫做委托处理器。

在客户端,HTTPClient类使用一个消息处理器来处理请求。默认的处理器是HTTPClientHandler,它通过网络发送请求,并从服务器上获得响应。你可以把自定义消息处理器插入到客户端管道中。

Asp.Net Web API也可以使用服务端的消息处理器。更多的信息请参考"HTTP消息处理器"(暂未实现。)

自定义消息处理器

 要编写一个消息处理器,需要从System.Net.Http.DelegatingHandler进行派生,并重写SendAsync方法。以下是该方法的签名:

System.Threading.Tasks.Task
SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken);

这个方法以HttpRequestMessage参数作为输入,并异步地返回一个HttpResponseMessage。一种典型的实现如下:

  1.处理请求消息。

  2.调用base.SendAsync将请求发送给内部处理器。

  3.内部处理器返回一条响应消息。(这一步是异步的)

  4.处理响应,并把他返回给调用者。

以下示例展示了一个消息处理器,它添加了一个自定义的标头给外部的请求。

public class MessageHandler : DelegatingHandler    {        private int _count = 0;        protected override System.Threading.Tasks.Task
SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { _count++; request.Headers.Add("X-Custom-Header", _count.ToString()); return base.SendAsync(request, cancellationToken); } }

base.SendAsync的调用是异步的。如果处理器在调用之后还要做一些工作,需使用await关键字,以便在方法完成之后继续执行。

以下示例展示了一个对错误码进行日志的处理器。如何进行日志没多大关系,但此例展示了如何得到处理器内部的响应。

public class LoggingHandler : DelegatingHandler     {         StreamWriter _writer;         public LoggingHandler(Stream stream)        {             _writer = new StreamWriter(stream);        }        protected override async System.Threading.Tasks.Task
SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { var response = await base.SendAsync(request, cancellationToken); if (!response.IsSuccessStatusCode) { _writer.WriteLine("{0}\t{1}\t{2}", request.RequestUri,(int)response.StatusCode, response.Headers.Date); } return response; } protected override void Dispose(bool disposing) { if (disposing) { _writer.Dispose(); } base.Dispose(disposing); } }

将消息处理器添加到客户端管线

 要将自定义处理器添加到HttpClient,需使用HttpClientFactory.Create方法:

HttpClient client = HttpClientFactory.Create(new MessageHandler());

消息处理器是按照它们传递给Create方法中的顺序来调用的。因此处理器是内嵌的,响应消息以反方向传递。即,最后一个处理器首先得到响应消息。

总结

 本文主要讲解HTTPClient消息处理器。涉及到的代码在文中都有过展示,暂时就不进行上传了。

本文参考链接

 

转载于:https://www.cnblogs.com/aehyok/p/3442277.html

你可能感兴趣的文章
51nod 1571 最近等对 | 线段树 离线
查看>>
关于parseInt的看法
查看>>
从用户端到后台系统,严选分销教会我这些事
查看>>
数据分析融入至BI工具的新思路
查看>>
c#必会知识点
查看>>
网页使用MD5加密
查看>>
JS 基础
查看>>
HBase shell 中的十六进制数值表示
查看>>
Python3 中 configparser 模块解析配置的用法详解
查看>>
新手android环境搭建、debug调试及各种插件安装__图文全解
查看>>
未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序 win2008R2 X64 IIS7.5
查看>>
Diffuse贴图+Lightmap+Ambient
查看>>
矩阵树定理
查看>>
[算法]Evaluate Reverse Polish Notation
查看>>
go语言之进阶篇接口的定义和实现以及接口的继承
查看>>
SmartPhone手机网站的制作
查看>>
自适应全屏与居中算法
查看>>
构建之法阅读笔记(一)
查看>>
帮助你设计的50个自由和新鲜的图标集
查看>>
Glusterfs[转]
查看>>