HTTP & HTTPs
HTTP
HTTP 消息
HTTP 方法
基础知识参见:HTTP 协议初识 - 阮一峰;
http请求
在 http请求 - Node直出理论与实践总结 中,从正常模式到数据直出再到服务端渲染直出,对http请求不断优化,加快首屏渲染时间。
HTTPS
基础知识参见: HTTPS 升级指南 - 阮一峰;
问题整理
使用场景:字典集参数拼接成querystring
public static string DicToQueryString(Dictionary<string, object> dic, bool isSort, bool isUrlEncode)
{
Dictionary<string, object> tempDic = (isSort) ?
dic.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value) : dic;
StringBuilder sb = new StringBuilder();
foreach (KeyValuePair<string, object> k in tempDic) {
string key = k.Key, val = "";
object value = k.Value;
if (value == null || (value is string && string.IsNullOrWhiteSpace(value.ToString()))) { continue; }
if (value is string) { val = value.ToString(); }
else { val = JsonConvert.SerializeObject(value); }
val = (isUrlEncode) ? StringUtils.UrlEncode(val) : val;
sb.Append(key).Append("=").Append(val).Append("&");
}
string querystring = sb.ToString();
if (querystring.Length > 1) { querystring = querystring.Substring(0, querystring.Length - 1); }
return querystring;
}
其中,参数isSort表示key是否排序,isUrlEncode表示value是否urlEncode处理。value的编解码方法如下
public static string UrlEncode(string str)
{
try {
string[] temp = str.Split(' ');
StringBuilder sb = new StringBuilder();
for (int t = 0; t < temp.Length; t++) {
sb.Append(HttpUtility.UrlEncode(temp[t].ToString(), Encoding.UTF8));
if (t < temp.Length - 1) { sb.Append("%20"); }
}
return sb.ToString();
} catch (Exception e) { return null; }
}
public static string UrlDecode(string str)
{
try {
return HttpUtility.UrlDecode(str, Encoding.UTF8);
} catch (Exception e) { return null; }
}
此处提供一个扩展工具类,推荐
/// <summary>
/// HttpUtility扩展
/// HttpUtility的urlencode会将空格编码成+,urldecode会将+解码成空格
/// </summary>
public class HttpUtilityEx
{
private static string bankEncode = HttpUtility.UrlEncode(" ");
private static string plusEncode = HttpUtility.UrlEncode("+");
/// 空格符的编码(+)转换为正常编码方式(%20),默认编码为UTF8
public static string UrlEncode(string url) {
return UrlEncode(url,Encoding.UTF8);
}
/// 空格符的编码("+")转换为正常编码方式(%20)
public static string UrlEncode(string url, Encoding e) {
if (string.IsNullOrEmpty(url)) { return string.Empty; }
string tmp = HttpUtility.UrlEncode(url,e);
tmp = tmp.Replace(bankEncode, "%20");//将HttpUtility.UrlEncode编码后的空格符(+)替换成%20
return tmp;
}
/// 保证+不会被decode成空格。默认编码UTF8
public static string UrlDecode(string url) {
return UrlDecode(url,Encoding.UTF8);
}
/// 保证+不会被decode成空格
public static string UrlDecode(string url,Encoding e) {
if (string.IsNullOrEmpty(url)) { return string.Empty; }
//参数中有+,先替换成HttpUtility.UrlEncode后的编码,以便HttpUtility.UrlDecode时能够还原成+,而不是把+解密成空格
url = url.Replace("+",plusEncode);
return HttpUtility.UrlDecode(url,e);
}
}
请求WebApi报错:400 Bad Request
解决参考:https://blog.csdn.net/lw1242189467/article/details/80048407
---
纵使山重水复,亦会柳暗花明
sunqh1991@163.com
欢迎关注,互相交流

浙公网安备 33010602011771号