用于.NET的可移植HTTP客户端
直到最近,关于在.NET、Silverlight、Windows Phone和Windows Store之间分享代码的问题之一,依旧是缺少发起HTTP请求的能力。每个框架支持一个或多个HTTP客户端,但在API层面它们互不兼容。
要解决该问题,开发者可以创建自己的平台相关适配器,并使用依赖注入把它们添加到有需要的可移植库中。而基本上,这也正是新的可移植HttpClient所做的事情。
当然,每个版本的HttpClientHandler都有不同的功能集。所以,为了尽可能地将更多的功能暴露出来,可移植HTTP客户端引入了诸如SupportsUseProxy和SupportsAllowAutoRedirect这样的扩展方法。
倘若开发者想要知道为何我们添加扩展方法而不是常规属性的话:某些Microsoft.Net.Http支持的平台已经提供并正在使用HttpClientHandler类。由于不能直接修改属性的内建版本,我们添加了扩展方法并通过NuGet包以独立程序集的方式发布。
基于以下原因,微软正在变得越来越青睐类似于可移植HttpClient这样的小型、带外发布:
首先,它搭建了一座桥梁以跨越我们已经发布的平台之间的差异。HttpClient是一个很好的例子,同样的还有对async和await关键字的支持。带外发布特性允许我们通过单一可移植类库针对多平台发布新功能,而无需等待其中任何一个平台添加该功能。 其次,我们的目标是增强与客户之间的反馈回路。过去,我们发布“大型”beta版本,例如整个.NET框架的beta版本。这一方法当然有其优势,但我们也发现了它的问题。其中最大的缺点是“大型”beta版发布代价高昂,而且它一般与RTM非常接近,这也就意味着我们不能再进行重大变更。实际上,我们必须拒绝大量在“大型”beta版本中获得的bug报告,因为它们仅影响了相对小众的客户,或是因为修订这些bug会把RTM版本置于风险之中。我们当然不是第一家遇到这个问题的公司;在这个产业里,整个敏捷软件开发运动都在聚焦于此。虽然我不想开启关于敏捷方法论的哲学讨论,但是很难否认尽早并经常发布对反馈回路的问题是有帮助的。
某些开发者期望的特性未能纳入这次候选发布,其中最重要的是对自动解压缩的支持。为了不推迟本次发布,该特性将在完成后出现在后续版本中。
为了在诸如Silverlight等老平台上支持async/await,可移植HttpClient依赖BCL可移植性包。
相关文章:
Portable HttpClient for .NET Framework and Windows Phone
第13周的NuGet包—Portable HttpClient使得portable libraries更加好用
Google API的.NET可移植类库1.4.0测试版发布
查看英文原文:A Portable HTTP Client for .NET
查看中文原文:用于.NET的可移植HTTP客户端
- 局域网与互联网环境下MTU的快速确定方法
- 【4】通过简化的正则表达式处理字符串
- silverlight中的socket编程注意事项
- socket中的byte消息格式设计
- 在silverlight中利用socket发送图片或文件
- 多线程中的ManualResetEvent
- 进程与线程
- ASP.NET TreeView相关问题
- 温故而知新:WinForm/Silverlight多线程编程中如何更新UI控件的值
- ASP.Net Web Page深入探讨
- 用Design+Blend轻松制作环形文字
- 对asp.net响应事件的试验
- 为服务器控件加入客户端事件处理的几种方法
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 编译原理课程设计词法分析
- 30分钟学会XGBoost
- Linux页框分配器之内存碎片化整理
- 手把手教你实现"短信轰炸"
- 最全总结!聊聊 Python 调用 JS 的几种方式
- 爬取小说网站章节和小说语音播放
- JavaScript原型、原型链及原型链污染
- 报刊订阅管理系统的设计与实现
- 使用Pytest创建一个Python测试自动化项目
- 宾馆客房管理系统的设计与实现
- /leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
- 使用Python和Chrome安装Selenium WebDriver
- 牛客网-从上到下打印二叉树
- leetcode 剑指 Offer 40. 最小的k个数
- 一文了解JDK12 13 14 GC调优秘籍-附PDF下载