【Github源码】

《上一篇》 介绍了Xmtool工具库中的XML操作类库,今天我们继续为大家介绍其中的HTTP请求类库。

在现如今的软件需求场景中,HTTP网络请求几乎是开发过程中必然会使用的功能;而系统自带的HTTPClient对象使用起来并不是那么容易和友好,因此我们对其进行了二次封装成了一个Web类库。

该Web类库提供了HTTP请求和HTTP安全相关两方面的封装。HTTP请求是基于系统自带的HttpClient对象进行了二次封装,提供了更易用的方法,并且对Json类型更加友好;HTTP安全方面主要针对XSS攻击提供了字符处理方法,后续会根据需要不断添加。

HTTP请求

使用HTTP请求,首选需要获取HttpClientExt对象:

HttpClientExt client = Xmtool.Web.Client();
// 或者
HttpClientExt client = Xmtool.Web.Client("microservice-1");

根据获取Client时传入的参数不同,系统将返回不同的实例;但对相同的参数会做单例处理,也就是说相同的参数将获取到同一个实例;当不传入任何参数时,每次都会返回一个全新的实例。

根据HTTP常用请求场景类库提供了各种属性和方法:

Timeout属性

BaseAddress属性

AddDefaultHeader方法

AddRequestHeader方法

AddRequestHeaderWithoutValidation方法

SetContent方法

SetJsonContent方法

SetJsonContent方法二

Clear方法

Get方法

GetAsync方法

Post方法

PostAsync方法

Put方法

PutAsync方法

Delete方法

DeleteAsync方法

Patch方法

PatchAsync方法

Head方法

HeadAsync方法

Options方法

OptionsAsync方法

1. Timeout属性

说明:用来设置或获取HTTP请求的超时时间。

2. BaseAddress属性

说明: 用来设置或获取HTTP请求的基本地址,在后续使用相对地址发送请求时会使用该地址进行拼接。

3. AddDefaultHeader方法

public HttpClientExt AddDefaultHeader(string name, string value)
说明:为HTTP请求设置请求头信息,该头信息会在实例每次发起请求时携带。
参数:

name:请求头名称。

value:请求头内容。

HttpClientExt client = Xmtool.Web.Client();
client.AddDefaultHeader("User", "admin");

4. AddRequestHeader方法

public HttpClientExt AddRequestHeader(string name, string value)
说明:为HTTP请求设置请求头信息,该头信息仅会在实例下一次发起请求时携带。
参数:

name:请求头名称。

value:请求头内容。

5. AddRequestHeaderWithoutValidation方法

public HttpClientExt AddRequestHeaderWithoutValidation(string name, string value)
说明:为HTTP请求设置请求头信息,该头信息仅会在实例下一次发起请求时携带;该方法和AddRequestHeader的区别是不会对参数的合法性进行检查。
参数:

name:请求头名称。

value:请求头内容。

6. SetContent方法

public HttpClientExt SetContent(string content)
说明:为下一次HTTP请求(主要是提交类请求,如Post)设置提交内容。
参数:

content:请求提交内容。

HttpClientExt client = Xmtool.Web.Client();
client.SetContnent("Good Day");
// TODO

7. SetJsonContent方法

public HttpClientExt SetJsonContent(string content)
说明:为下一次请求设置提交内容,必须是JSON格式。
参数:

content:请求提交内容,JSON格式。

HttpClientExt client = Xmtool.Web.Client();
client.SetJsonContnent("{\"Author\": \"softwaiter\"}");
// TODO

8. SetJsonContent方法二

public HttpClientExt SetJsonContent(DynamicObjectExt obj)
说明:通过动态对象为下一次请求设置JSON格式的提交内容。
参数:

obj:要提交的动态对象。

DynamicObjectExt obj = new DynamicObjectExt();
obj.Author = "softwaier"; HttpClientExt client = Xmtool.Web.Client();
client.SetJsonContnent(obj);
// TODO

9. Clear方法

public HttpClientExt Clear()
说明:清除仅在下一次请求中生效的提交内容和请求头信息。

10. Get方法

public HttpResponseExt Get(string requestUri)
说明:以Get方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.Get("https://www.baidu.com");
// TODO

11. GetAsync方法

public async Task<HttpResponseExt> GetAsync(string requestUri)
说明:Get方法的异步版本。

12. Post方法

public HttpResponseExt Post(string requestUri)
说明:以Post方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

// 新增一条人员信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"user\": \"admin", \"password\": \"Admin123\"}")
.Post("https://www.ceshi.com/person");
// TODO

13. PostAsync方法

public async Task<HttpResponseExt> PostAsync(string requestUri)
说明:Post方法的异步版本。

14. Put方法

public HttpResponseExt Put(string requestUri)
说明:以Put方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

// 修改Id为1的人员住址
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"address\": \"BeiJing\"}")
.Put("https://www.ceshi.com/person/1");
// TODO

15. PutAsync方法

public async Task<HttpResponseExt> PutAsync(string requestUri)
说明:Put方法的异步版本。

16. Delete方法

public HttpResponseExt Delete(string requestUri)
说明:以Delete方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

// 删除Id为1的人员信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.Delete("https://www.ceshi.com/person/1");
// TODO

17. DeleteAsync方法

public async Task<HttpResponseExt> DeleteAsync(string requestUri)
说明:Delete方法的异步版本。

18. Patch方法

public HttpResponseExt Patch(string requestUri)
说明:以Patch方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

// 修改Id为1的人员信息
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt rep = client.SetJsonContent("{\"name\":\"wangxm\", \"age\": 18}")
.Delete("https://www.ceshi.com/person/1");
// TODO

19. PatchAsync方法

public async Task<HttpResponseExt> PatchAsync(string requestUri)
说明:Patch方法的异步版本。

20. Head方法

public HttpResponseExt Head(string requestUri)
说明:以Head方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

21. HeadAsync方法

public async Task<HttpResponseExt> HeadAsync(string requestUri)
说明:Head方法的异步版本。

22. Options方法

public HttpResponseExt Options(string requestUri)
说明:以Options方式发起一个HTTP请求。
参数:

requestUri:HTTP请求地址,可以是相对地址或绝对地址;如果是相对地址将使用BaseAddress进行拼接。

23. OptionsAsync方法

public async Task<HttpResponseExt> OptionsAsync(string requestUri)
说明:Options方法的异步版本。

HTTP安全

HTTP安全在类库中目前仅提供了一个应对XSS攻击的处理方法,该方法会对传入参数进行二次,将内容中有风险部分进行处理并返回。

使用时需要首先获取HttpSecurity对象:

HttpSecurity security = Xmtool.Web.Security();

Xss方法

1. Xss方法

public string Xss(string str)
说明:对指定字符内容进行Xss风险处理并返回处理结果。
参数:

str:需要进行处理的字符串内容。

string str = "<script>alert(123);</script><div>hello world.</div>";
string str2 = Xmtool.Web.Security().Xss(str);
Console.Writeline(str2); // 输出<div>hello world.</div>
//TODO

附加说明

一、DynamicObjectExt对象

说明:DynamicObjectExt动态对象是Xmtool工具库中最具特色的一项功能;通过该对象可以无需事先定义就能像使用实体类一样进行数据对象的赋值和操作;且比系统自带的dynamic对象更加灵活友好。如果你熟悉Javascript的话,它就像Javascript中的变量一样可以任意使用;更加详细的说明请参考《DynamicObjectExt详细说明》

二、HttpResponseExt对象

HttpResponseExt对象用于接收HTTP请求返回结果,封装了响应码、响应头、响应内容 3 部分内容。

StatusCode属性

Headers属性

Content属性

Json属性

Xml属性

1. StatusCode属性

说明:HTTP请求的响应状态码。

2. Headers属性

说明:HTTP请求的响应头信息。
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt resp = client.Get("https://www.baidu.com");
if (resp.Headers.ContainsKey("user"))
{
string user = resp.Headers["user"];
// TODO
}

3. Content属性

说明:HTTP请求的响应内容。

4. Json属性

说明:HTTP请求返回的JSON格式的内容;如果返回内容不是合法的JSON格式,将返回异常。
// https://www.ceshi.com/person/1 请求返回内容
{
"Name": "softwaiter",
"Age": 18,
"Address": "BeiJing"
}
HttpClientExt client = Xmtool.Web.Client();
HttpResponseExt resp = client.Get("https://www.ceshi.com/person/1");
if (resp.Json.Name == "softwaiter")
{
// TODO
}

5. Xml属性

说明:HTTP请求返回的XML格式的内容;如果返回内容不是合法的XML格式,将返回异常。

【Github源码】

开源.NetCore通用工具库Xmtool使用连载 - HTTP请求篇的更多相关文章

  1. 开源.NetCore通用工具库Xmtool使用连载 - 加密解密篇

    [Github源码] <上一篇>详细介绍了Xmtool工具库中的正则表达式类库,今天我们继续为大家介绍其中的加密解密类库. 在开发过程中我们经常会遇到需要对数据进行加密和解密的需求,例如密 ...

  2. 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)

    在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...

  3. Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

    在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在G ...

  4. Cowboy 开源 WebSocket 网络库

    Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...

  5. java开源时间/日期库Joda-Time

    任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径.使用 JDK 完成这项任务将非常痛苦和繁琐.现在来看看 Joda Time,一 ...

  6. fastjson是阿里巴巴的开源JSON解析库

    fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}&q ...

  7. 人生维艰,何不利用开源.NET函数库让工作更轻松

    今天推荐的文章会谈到一些让你工作更轻松的开源.NET函数库. 即使业界有时候认为.NET开源社区不太健康,很多开发团队都更多依赖于微软提供的东西来开发.不过最近在.NET世界中还是诞生了一些优秀和有意 ...

  8. ios开发与安卓开源项目及库

    自己总结的iOS.mac开源项目及库 https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的Android开源项目及库 https://github.com/Tim9 ...

  9. 1. Android 系统上一款开源的图表库

    1. MPAndroidChart  MPAndroidChart 是 Android 系统上一款开源的图表库.目前提供线图和饼图,支持选择.缩放和拖放. 一个可以拖动缩放的图表库,包含曲线图.直方图 ...

  10. 使用C++的开源序列化(Serialization)库cereal

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用C++的开源序列化(Serialization)库cereal.

随机推荐

  1. 花式WA

    如果WA了,请从下述所有方面全方面考察反思一下= =,(不断更新): 1.输出YES,NO不是N0,还有"."不要眼瞎= =,(只有空格回车不对才提示PE): 2.边界值,0,1, ...

  2. 2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数。

    2023-02-21:请用go语言调用ffmpeg,解码mp4文件,输出视频信息和总帧数. 答案2023-02-21: 使用 github.com/moonfdd/ffmpeg-go 库,这个库比go ...

  3. 2021-10-23:位1的个数。编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1‘ 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中

    2021-10-23:位1的个数.编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量).提示:请注意,在某些语言(如 Java)中 ...

  4. Django4全栈进阶之路18 项目实战(用户管理):user_edit.html用户编辑画面设计

    1.模块 {% extends 'base.html' %} {% block content %} <!-- 编辑用户表单 --> <div class="card mt ...

  5. 【实践篇】领域驱动设计:DDD工程参考架构

    背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同,并没有统一的.标准的DDD工程架构.有些团队可能遵循经典的DDD四层架构,或改进的DDD四层架构,有些团队可能综合考虑分 ...

  6. xshell入门及Linux常用命令

    一.首先您的xshell先连接上需要远程连接的服务器. 二.打开连接,出现下记页面,就证明与服务器连接正常了. 三.接下来,我们就可以使用命令做一系列操作了. 3-1:cd 是进入下一级目录命令 例如 ...

  7. 【python基础】复杂数据类型-列表类型(增删改查)

    1.初识列表(list) 列表由一系列按特定顺序排列的数据元素组成.可以将任何类型数据元素加入列表中,其中的数据元素之间没有任何关系.鉴于列表通常包含多个数据元素,给列表指定一个表示复数的名称是个不错 ...

  8. JavaCV的摄像头实战之十三:年龄检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  9. 龙芯电脑编译redis (loongarch)

    1.获取源码 源码地址:https://redis.io/download/#redis-downloads 最新版本是7.2,这里用redis5测试,最后一个版本是5.0.14 wget https ...

  10. 多光源渲染方案 - Many Lights Sampling

    目录 Importance Sampling(IS) Light BVH [2018~2019] 预构建 BVH 重建 BVH 基于 BVH node 的 IS Real-time Stochasti ...