​最近工作比较忙,很久没有写东西了,今天抽点时间整体一下最近工作的一个知识点小结。http请求对我们来说一点都不模式,程序员的我们有可能天天就是和这一些打交道。无论是BS架构的程序,前后端的数据交互,已经后台服务之间的数据交互,http还是主流。

最近接触的一个新项目,其项目是一个祖传项目,经历很多波小伙伴的手,代码风格也各不相同,重复性的代码一大波一大波的堆砌。在接手熟悉整理过程的,开始对一些公用方法进行封装打包,现在我就分享其中一个间的模块,那么就是对接口间的http请求处理封装。

当然了,其实http请求对绝大部分小伙伴来说都是家常便饭的熟悉,但是我今天还是要写出来,其目的是为了做一次知识总结和分享,也为了一个项目的统一,避免重复的造不同的轮子。在文中如有有说的不好的,或者错误的地方,希望你能够指点指点,谢谢!

言归正传,回到主题上来哈。至于http请的详细介绍,我就不在此啰嗦了,也免得占用大家时间。在实际使用过中,get和post是两种最常见不过的方式,下面也主要围绕这两个方式介绍。本文中主要是针对HttpWebRequest的封装进行分享。

一、聊聊Content-Type几种常见类

在聊http请求操作,首先需要了解的就是content-type(内容类型)关键,简单的说就是文档数据交互方法,其常见的主要有如下3种。

A:application/x-www-form-urlencoded

最常见的提交数据的方式,也是默认数据提交方式,其数据传递最终会转换为键值对的方式传递,key1=val1&key2=val2

B:multipart/form-data

表单方式提交,也是比较常见的提交方式。

C、application/json

该方式越来越流行,已json方式交互,很多开发接口数据交互都是json方式。

二、聊聊PAI的常见参数接收方式

其实我们在说http请求,API是离不开的话题,这也是本次分享的主要原因。尤其是现在都在提倡微服务,服务间的自调用就在所难免。那么下面我将简单总结一下常见的PAI数据接收方式:

按照有无参数分类,分了两大类,有参接口、无参接口。

其中,无参接口最为简单,没有什么好说的。下面主要说一下有参接口数据接收方式。

FromQuery:这一种比较简单的实现方式,也就是我们常见的url地址上的键值对方式传递接受,比如:url?key1=value1&key2=value2。该方式适用于get和post两种方式

FromRoute:路由参数,简单的说就是参数就是url地址的一部分。根据路由规则解析对应的参数。比如:urls/value1/value2。该方式适用于get和post两种方式

FromForm:表单方式传递,通过from表单方式接受参数,直接提交一个from表单。该方式使用与post。

FromBody:以json方式提交数据,接受时以一个对应的实体模型接收。该方式使用post

嗯,上面几种方式是我们常见的方式,了解了这一些方式,能解决掉90%的http请求。其他的方式就不在此详聊。

三、Content-Type与PAI常见参数接收方式对应关系

Content-Type

参数接收方式

使用类型

application/x-www-form-urlencoded

FromQuery

FromRoute

get、post

multipart/form-data

FromForm

post

application/json

FromBody

post

四、http请求返回接收方式

其实严格的意义来说法不正确,其实接收方式都是一个字符串方式。我说的方式,是指在接收到请求结果后,其自己对数据的处理方式,也就两种方式,其一,请求结果字符串;其二、请求结果转换为对应的实体模型。

五、HttpWebRequest封装

结合上面的几点分析,下面主要针对这几种情况进行封装说明。

针对FromQuery参数:在封装中,通过字典方式交互

针对FromRoute参数:在封装中,通过list字符串集合交互

针对FromForm参数:在封装中,通过字典方式交互

针对FromBody参数:在分装中,通过数据模型方式交互

在每一种交互方式上,根据编码方式、过期时间、返回类型,又重载了几个方法

下面直接上代码:

get方式封装部分代码:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text; namespace XYH.Tools.HttpTool
{
/// <summary>
/// http get 请求相关的操作帮助类
/// </summary>
public partial class HttpTool : HttpToolBase
{
#region 无参 /// <summary>
/// http请求,不单独带有参数(返回一个泛型实体)
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGet<TReturn>(string url, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet<TReturn>(url, defaultEncodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数(返回一个字符串)
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGet(string url, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet(url, defaultEncodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数 (返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGet<TReturn>(string url, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet<TReturn>(url, encodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数(返回一个字符串)
/// 自定义编码方式
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGet(string url, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet(url, encodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数 (返回一个泛型实体)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGet<TReturn>(string url, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet<TReturn>(url, defaultEncodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数(返回一个字符串)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGet(string url, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet(url, defaultEncodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数 (返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGet<TReturn>(string url, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet<TReturn>(url, encodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,不单独带有参数(返回一个字符串)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGet(string url, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForGet(url, encodType, timeout, headerKeyValue);
} #endregion #region 参数字典 (键值对参数 path?kay1=value1&kay12=value2...) /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetDic(string url, Dictionary<string, string> parameters, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, defaultEncodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典(键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetDic<TReturn>(string url, Dictionary<string, string> parameters, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, defaultEncodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetDic(string url, Dictionary<string, string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, encodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetDic<TReturn>(string url, Dictionary<string, string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, encodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetDic(string url, Dictionary<string, string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, defaultEncodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetDic<TReturn>(string url, Dictionary<string, string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, defaultEncodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetDic(string url, Dictionary<string, string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, encodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetDic<TReturn>(string url, Dictionary<string, string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, encodType, timeout, headerKeyValue);
} #endregion #region rout路由参数 /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetRout<TReturn>(string url, List<string> parameters, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, defaultEncodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetRout(string url, List<string> parameters, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, defaultEncodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetRout<TReturn>(string url, List<string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, encodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetRout(string url, List<string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, encodType, defaultTimeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetRout<TReturn>(string url, List<string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, defaultEncodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetRout(string url, List<string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, defaultEncodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpGetRout<TReturn>(string url, List<string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet<TReturn>(url, encodType, timeout, headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpGetRout(string url, List<string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForGet(url, encodType, timeout, headerKeyValue);
} #endregion /// <summary>
/// 获取请求结果(返回一个泛型实体)
/// </summary>
/// <param name="url">url</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果返回值</returns>
private static TReturn GetResponseResultForGet<TReturn>(string url, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
return GetResponseResult<TReturn>(url, string.Empty, "get", string.Empty, encodType, timeout, headerKeyValue);
} /// <summary>
/// 获取请求结果(返回一个泛型实体)
/// </summary>
/// <param name="url">url</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果返回值</returns>
private static string GetResponseResultForGet(string url, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
return GetResponseResult(url, string.Empty, "get", string.Empty, encodType, timeout, headerKeyValue);
}
}
}

post方式封装部分代码:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text; namespace XYH.Tools.HttpTool
{
/// <summary>
/// http请求相关的操作帮助类
/// </summary>
public partial class HttpTool : HttpToolBase
{
#region 无参 /// <summary>
/// POST请求,无参 (返回一个泛型实体)
/// </summary>
/// <param name="url">地址</param>
/// <param name="requestData">请求参数</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static TReturn HttpPost<TReturn>(string url, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost<TReturn>(url, defaultEncodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个字符串)
/// </summary>
/// <param name="url">地址</param>
/// <param name="requestData">请求参数</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static string HttpPost(string url, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost(url, defaultEncodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="encodType">编码方式,默认为utf-8</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static TReturn HttpPost<TReturn>(string url, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost<TReturn>(url, encodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个字符串)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="encodType">编码方式,默认为utf-8</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static string HttpPost(string url, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost(url, encodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个泛型实体)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static TReturn HttpPost<TReturn>(string url, int timeout, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost<TReturn>(url, defaultEncodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个字符串)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static string HttpPost(string url, int timeout, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost(url, defaultEncodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="encodType">编码方式,默认为utf-8</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static TReturn HttpPost<TReturn>(string url, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost<TReturn>(url, encodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// POST请求,无参 (返回一个字符串)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="encodType">编码方式,默认为utf-8</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果</returns>
public static string HttpPost(string url, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
//获得接口返回值
return GetResponseResultForPost(url, encodType, timeout, headerKeyValue: headerKeyValue);
} #endregion #region 参数字典 (键值对参数 path?kay1=value1&kay12=value2...) /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="isAcceptForm">参数是否来自Form, true:代表来自Form false:来自url 默认为false</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostDic(string url, Dictionary<string, string> parameters, bool isAcceptForm = false, List<MHeadParamet> headerKeyValue = null)
{
if (!isAcceptForm)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, defaultEncodType, defaultTimeout, headerKeyValue: headerKeyValue);
}
else
{
return GetResponseResultForPost<Dictionary<string, string>>(url, defaultEncodType, defaultTimeout, parameters, headerKeyValue: headerKeyValue);
}
} /// <summary>
/// http请求,并带有请求参数字典(键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostDic<TReturn>(string url, Dictionary<string, string> parameters, bool isAcceptForm = false, List<MHeadParamet> headerKeyValue = null)
{
if (!isAcceptForm)
{
// 构建请求参数 multipart/form-data
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, defaultEncodType, defaultTimeout, headerKeyValue: headerKeyValue);
}
else
{
return GetResponseResultForPost<TReturn>(url, defaultEncodType, defaultTimeout, GetRequestData(parameters), "application/x-www-form-urlencoded;charset=utf-8", headerKeyValue: headerKeyValue);
}
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostDic(string url, Dictionary<string, string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, encodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">请求参数字典</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostDic<TReturn>(string url, Dictionary<string, string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, encodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostDic(string url, Dictionary<string, string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, defaultEncodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostDic<TReturn>(string url, Dictionary<string, string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, defaultEncodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个字符串)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostDic(string url, Dictionary<string, string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, encodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有请求参数字典 (键值对参数 path?kay1=value1&kay12=value2...)(返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">参数集合</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostDic<TReturn>(string url, Dictionary<string, string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, encodType, timeout, headerKeyValue: headerKeyValue);
} #endregion #region rout路由参数 /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostRout<TReturn>(string url, List<string> parameters, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, defaultEncodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostRout(string url, List<string> parameters, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, defaultEncodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostRout<TReturn>(string url, List<string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, encodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostRout(string url, List<string> parameters, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, encodType, defaultTimeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostRout<TReturn>(string url, List<string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, defaultEncodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostRout(string url, List<string> parameters, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, defaultEncodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostRout<TReturn>(string url, List<string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost<TReturn>(url, encodType, timeout, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,并带有list集合请求参数(rout路由参数)(返回一个字符串)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="parameters">list集合请求参数</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostRout(string url, List<string> parameters, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 构建请求参数
url = GetRequestPath(url, parameters); // 发起请求
return GetResponseResultForPost(url, encodType, timeout, headerKeyValue: headerKeyValue);
} #endregion #region json参数 /// <summary>
/// http请求,参数为实体对象 (返回一个泛型实体)
/// </summary>
/// <param name="url">地址</param>
/// <param name="inputParamet">请求参数模型</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostModel<TReturn, TInput>(string url, TInput inputParamet, bool isAcceptForm = false, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForPost<TReturn, TInput>(url, defaultEncodType, defaultTimeout, inputParamet, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,参数为实体对象 (返回一个字符串)
/// </summary>
/// <param name="url">地址</param>
/// <param name="inputParamet">请求参数模型</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostModel<TInput>(string url, TInput inputParamet, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForPost<TInput>(url, defaultEncodType, defaultTimeout, inputParamet, headerKeyValue);
} /// <summary>
/// http请求,参数为实体对象(返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="inputParamet">请求参数模型</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostModel<TReturn, TInput>(string url, TInput inputParamet, Encoding encodType, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForPost<TReturn, TInput>(url, encodType, defaultTimeout, inputParamet, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,参数为实体对象(返回一个泛型实体)
/// 自定义编码方式
/// </summary>
/// <param name="url">地址</param>
/// <param name="inputParamet">请求参数模型</param>
/// <param name="encodType">编码方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static TReturn HttpPostModel<TReturn, TInput>(string url, TInput inputParamet, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForPost<TReturn, TInput>(url, encodType, timeout, inputParamet, headerKeyValue: headerKeyValue);
} /// <summary>
/// http请求,参数为实体对象(返回一个泛型实体)
/// 自定义编码方式
/// 自定义超时时间 单位毫秒 默认为1分钟
/// </summary>
/// <param name="url">地址</param>
/// <param name="inputParamet">请求参数模型</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求处理结果</returns>
public static string HttpPostModel<TInput>(string url, TInput inputParamet, Encoding encodType, int timeout, List<MHeadParamet> headerKeyValue = null)
{
// 发起请求
return GetResponseResultForPost<TInput>(url, encodType, timeout, inputParamet, headerKeyValue);
} #endregion #region 帮助方法 /// <summary>
/// 获取请求结果(返回一个泛型实体)
/// </summary>
/// <param name="url">url</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="requestData">请求参数</param>
/// <param name="contentType">请求参数传递方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果返回值</returns>
private static T GetResponseResultForPost<T>(string url, Encoding encodType, int timeout, string requestData = "",
string contentType = "", List<MHeadParamet> headerKeyValue = null)
{
return GetResponseResult<T>(url, requestData, "post", contentType, encodType, timeout, headerKeyValue);
} /// <summary>
/// 获取请求结果(返回一个字符串)
/// </summary>
/// <param name="url">url</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="requestData">请求参数</param>
/// <param name="contentType">请求参数传递方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果返回值</returns>
private static string GetResponseResultForPost(string url, Encoding encodType, int timeout,
string requestData = "", string contentType = "", List<MHeadParamet> headerKeyValue = null)
{
return GetResponseResult(url, requestData, "post", contentType, encodType, timeout, headerKeyValue);
} /// <summary>
/// 获取请求结果(返回一个泛型实体)
/// </summary>
/// <param name="url">url</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="requestData">请求参数</param>
/// <param name="contentType">请求参数传递方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果返回值</returns>
private static TReturn GetResponseResultForPost<TReturn, TInput>(string url, Encoding encodType, int timeout, TInput inputParamet,
bool isAcceptForm = false, List<MHeadParamet> headerKeyValue = null)
{
return GetResponseResult<TReturn>(url, JsonConvert.SerializeObject(inputParamet), "post", isAcceptForm ? "application/x-www-form-urlencoded;charset=utf-8" : "application/json", encodType, timeout, headerKeyValue);
} /// <summary>
/// 获取请求结果(返回一个字符串)
/// </summary>
/// <param name="url">url</param>
/// <param name="encodType">编码方式</param>
/// <param name="timeout">超时时间</param>
/// <param name="requestData">请求参数</param>
/// <param name="contentType">请求参数传递方式</param>
/// <param name="headerKeyValue">头部键值对参数</param>
/// <returns>请求结果返回值</returns>
private static string GetResponseResultForPost<TInput>(string url, Encoding encodType, int timeout, TInput requestData,
List<MHeadParamet> headerKeyValue = null)
{
return GetResponseResult(url, JsonConvert.SerializeObject(requestData), "post", "application/json", encodType, timeout, headerKeyValue);
} #endregion
}
}

总结:

我已经将源码上传到GitHub上,里面级包括封装组件源码、测试接口、测试调用

源码地址:https://github.com/xuyuanhong0902/XYH.Tools.HttpTool

同时,我也将生产包上传至NuGet上,有需要的可以直接使用:XYH.Tools.HttpTool

今天就写到这了,明天还得早起上班码砖呢。。。哈哈哈,快过年了,祝你新年快乐。谢谢阅读!

END
为了更高的交流,欢迎大家关注我的公众号,扫描下面二维码即可关注,谢谢:

聊聊HTTP请求那一些事_HttpWebRequest_一篇就够了的更多相关文章

  1. mysql那些事之索引篇

    mysql那些事之索引篇 上一篇博客已经简单从广的方面介绍了一下mysql整体架构以及物理结构的内容. 本篇博客的内容是mysql的索引,索引无论是在面试还是我们日常工作中都是非常的重要一环. 索引是 ...

  2. 如何实现Http请求报头的自动转发[应用篇]

    如今的应用部署逐渐向微服务化发展,导致一个完整的事务往往会跨越很多的应用或服务,出于分布式链路跟踪的需要,我们往往将从上游服务获得的跟踪请求报头无脑地向下游服务进行转发.本文介绍的这个名为Header ...

  3. 爬虫中网络请求的那些事之urllib库

    目录 爬虫之网络请求中的那些事 urllib库 urlopen函数 urlretrieve函数 urlencode.parse_qs函数 urlparse.urlsplit函数: request.Re ...

  4. 聊聊Unity项目管理的那些事:Git-flow和Unity

    0x00 前言 目前所在的团队实行敏捷开发已经有了一段时间了.敏捷开发中重要的一个话题便是如何对项目进行恰当的版本管理.项目从最初使用svn到之后的Git One Track策略再到现在的GitFlo ...

  5. HBase运维实践-聊聊RIT的那点事

    相信长时间运维HBase集群的童鞋肯定都会对RIT(Region-In-Transition,很多参考资料误解为Region-In-Transaction,需要注意)有一种咬牙切齿的痛恨感,一旦Reg ...

  6. springmvc请求方法那些事

    @RequestMapping 用法详解之地址映射 (2013-08-11 16:06:58) 转载▼ 标签: it   前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式 ...

  7. 你所不知道的html5与html中的那些事第三篇

    文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后,所有的工作 ...

  8. SpringBoot中异步请求和异步调用(看这一篇就够了)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10661591.html,否则将追究法律责任!!! 一.SpringBoot中异步请求的使用 ...

  9. Verilog HDL那些事_建模篇笔记(实验九:VGA驱动)

    1.了解VGA协议 VGA协议有5个输入信号,列同步信号(HSYNC Signal),行同步信号(VSYNC Signal),红-绿-蓝,颜色信号(RGB Signal). 一帧屏幕的显示是由行从上至 ...

随机推荐

  1. Vue 设置class样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 解决input number类型上下滚动 禁用滚轮事件

    1.去掉input在type="number"时的上下箭头 <style> input::-webkit-outer-spin-button,input::-webki ...

  3. H3C查看、删除已经保存配置文件--用户图示(console)以上

    <H3C>display saved-configuration    //显示已经保存的内容 <H3C>reset saved-configuration      //删除 ...

  4. 【GYM102091】2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest

    A-Evolution Game 题目大意:有$n$个不同的野兽,定义第$i$ 个野兽有 $i$ 个眼睛和 $h[i]$ 个角,你可以任意从中选择一个野兽进行进化,每次进化角数量必须增加,而且进化后要 ...

  5. 【Docker】Ubuntu16.04将Docker升级至最新版

    1.使用curl升级到最新版 curl -fsSL https://get.docker.com/ | sh 2.重启Docker sudo systemctl restart docker 3.设置 ...

  6. C. 【UNR #3】配对树

    题解: 首先可以贪心 于是问题可以等价成一条边被算当且仅当子树中个数为奇数个 题解的做法比较简单 考虑每条边,加入其子树内的点 然后为了保证区间长度为偶数 分成f0,0 f0,1 f1,0 f1,1即 ...

  7. boostrap-非常好用但是容易让人忽略的地方【4】:Font Awesome

    font-awesome基本用法 官方代码传送门 font-awesome在bootstrap中的特殊用法(这个才是重点) 要点归纳1(官方) 官方代码传送门 要点归纳2(我的) <a href ...

  8. Java 工程师应该掌握的知识

    以 Java 工程师应该掌握的知识为例,按重要程度排出六个梯度: 第一梯度:计算机组成原理.数据结构和算法.网络通信原理.操作系统原理. 第二梯度:Java 基础.JVM 内存模型和 GC 算法.JV ...

  9. 举例理解Hibernate的三种状态(转)

    转自:https://blog.csdn.net/yiguang_820/article/details/79073152 初学Hibernate,了解到Hibernate有三种状态:transien ...

  10. Vijos1774 机器翻译 [模拟]

    1.题意:给定一段长度为N个单词的文章(一个单词用一个非负整数表示),可以使用一个容量为M个元素的容器.你的任务是使用字典的帮助翻译文章,遇到一个单词,查询之后将此单词的释义放入容器中,下次遇到时若此 ...