博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lind.DDD.Utils.HttpHelper里静态对象引出的Http超时问题
阅读量:6136 次
发布时间:2019-06-21

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

Lind.DDD.Utils.HttpHelper组件主要实现了对HTTP的各种操作,如Get,Post,Put和Delete,它属于最纯粹的操作,大叔把它封装的目的主要为了实现与API安全授权的统一,你不可能为每个请求都写一个“逻辑完全一样的加密规则”,这是违背DRY原则的,我们应该通过面向对象的各位原则,将这种可变的部分封装!

公开的统一方法

真正的对象转键/值对

支持对复杂类型,集合类型转为Dictionary的键值对,它并不是网上说的,只把一层属性进行拼接,而是大叔利用递归写了一个算法,琢层查找对象。

   ///         /// 将对象转为键值对象(完全支持最复杂的类型)        /// 作者:仓储大叔        ///         ///         /// 
public static IDictionary
ToDictionary(this object obj) { try { var dic = new Dictionary
(); var prefix = new Dictionary
(); foreach (var p in obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) { ReGenerate(obj, p, prefix, dic, null); prefix.Clear(); } return dic; } catch (Exception) { throw; } }

其中ReGenerate核心方法被封装到了Lind.DDD.Utils.HttpHelper组件里

静态对象引起的超时

对于Http方法来说,我们可以定义它的handler,添加一些压缩,代理,身份验证等信息,但在组件设计时一定要注意,当你定义了handler之后,如果又显示的设计了超时时间,千万不要将handler做成全局静态属性,因为这样会让你的第一次请求后的其它请求都超时,因为你的超时时间依赖你全局的handler,正确的做法,应该在每个方法里(get,post,put,delete)定义自已的handler,类似这样的代码是正确的。

public static HttpResponseMessage Get(string requestUri, NameValueCollection nv = null, int timeOut = 10)        {            var handler = new HttpClientHandler() { AutomaticDecompression = System.Net.DecompressionMethods.GZip };            using (var http = new HttpClient(handler))            {    //超时                http.Timeout = new TimeSpan(0, 0, timeOut);                HttpResponseMessage response;                try                {                    response = http.GetAsync(GeneratorUri(requestUri, ApiValidateHelper.GenerateCipherText(nv))).Result;                }                catch (Exception ex)                {                    response = new HttpResponseMessage(System.Net.HttpStatusCode.RequestTimeout) { Content = new StringContent("请求超时") };                    Logger.LoggerFactory.Instance.Logger_Error(ex);                }                return response;            }        }

对于一种知识,一个概念的理解程度,有时决定了组件设计的正确性与安全性!

让我们一起对技术做更深入,更直接的研究吧!

转载地址:http://aieua.baihongyu.com/

你可能感兴趣的文章
Mac Tomcat 安装与配置
查看>>
自己写中文分词之(二)_用HMM模型实现分词
查看>>
java开发过程中的命名规范
查看>>
Linux系统启动过程及其修复过程简析(CentOS5、6)
查看>>
CentOS 7 防火墙设置
查看>>
RHEL java 环境变量
查看>>
yum在企业网络中应用
查看>>
03.移动页面用户行为报告
查看>>
关于embedded linux的使用、开发、学习的一点自已的体会
查看>>
找到一部不错的c语言学习教程
查看>>
openstack 虚拟机添加网卡
查看>>
Groovy学习笔记(6)-javax.script.* API
查看>>
RocketMQ服务搭建
查看>>
微信支付 - 可以下单但是无法收到通知消息Log总显示begin notify
查看>>
分享我如何活用notepad++
查看>>
Object-c的基础概念
查看>>
GNU Building System
查看>>
自我关系的建立
查看>>
RAID
查看>>
配置文件及工具包
查看>>