WebApi 帮助类

使用 HttpClient 与 HttpWebRequest 两种方式调用 WebApi 帮助类

简介

现最常见的软件开发模式就是 服务端B/SWebApiWebServer) + 客户端(C/SAndroidIOS)。
公司有部分新项目修改为逻辑在服务端处理,所以通过两种方法封装一个C/S端调用WebApi接口的帮助类。
调试WebApi推荐使用:Postman

帮助类

HttpClient

HttpClientHelper

创建Get请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/// <summary>
/// 创建Get请求
/// </summary>
/// <param name="url">Api访问地址</param>
/// <param name="requestUrl">详细方法路径</param>
/// <param name="parameters">请求参数</param>
/// <returns>Api返回值</returns>
public static string CreateGetHttpClient(string url, string requestUrl, IDictionary<string, string> parameters)
{
try
{
StringBuilder builder = new StringBuilder();
builder.Append(url);
builder.Append(requestUrl);
if (parameters != null && parameters.Count >= 1)
{
builder.Append("?");
int i = 0;
foreach (var item in parameters)
{
if (i > 0)
{
builder.Append("&");
}
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(url);
var result = httpClient.GetAsync(builder.ToString()).Result;
return result.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
TXTHelper.Logs(ex.ToString());
return "";
}
}
创建Post请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <summary>
/// 创建Post请求
/// </summary>
/// <param name="url">Api访问地址</param>
/// <param name="requestUrl">详细方法路径</param>
/// <param name="parameters">请求参数</param>
/// <returns>Api返回值</returns>
public static string CreatePostHttpClient(string url, string requestUrl, IDictionary<string, string> parameters)
{
try
{
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(url);
var result = httpClient.PostAsync(requestUrl, new FormUrlEncodedContent(parameters)).Result;
return result.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
TXTHelper.Logs(ex.ToString());
return "";
}
}

HttpWebRequest

创建Get请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/// <summary>
/// 创建Get请求
/// </summary>
/// <param name="url">Api访问地址</param>
/// <param name="requestUrl">详细方法路径</param>
/// <param name="parameters">请求参数</param>
/// <returns>Api返回值</returns>
public static string CreateGetHttpWebRequest(string url, string requestUrl, IDictionary<string, string> parameters)
{
try
{
StringBuilder builder = new StringBuilder();
builder.Append(url);
builder.Append(requestUrl);
if (parameters != null && parameters.Count >= 1)
{
builder.Append("?");
int i = 0;
foreach (var item in parameters)
{
if (i > 0)
{
builder.Append("&");
}
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.ToString());
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
return reader.ReadToEnd();
}
catch (Exception ex)
{
TXTHelper.Logs(ex.ToString());
return "";
}
}

/// <summary>
/// 创建Get请求
/// </summary>
/// <param name="url">Api访问地址</param>
/// <param name="requestUrl">详细方法路径</param>
/// <param name="parameters">请求参数</param>
/// <param name="encoding">字符编码</param>
/// <param name="timout ">请求超时前等待的毫秒数,默认值是 100,000 毫秒(100 秒)</param>
/// <returns>Api返回值</returns>
public static string CreateGetHttpWebRequest(string url, string requestUrl, IDictionary<string, string> parameters, Encoding encoding, int timout)
{
try
{
StringBuilder builder = new StringBuilder();
builder.Append(url);
builder.Append(requestUrl);
if (parameters != null && parameters.Count >= 1)
{
builder.Append("?");
int i = 0;
foreach (var item in parameters)
{
if (i > 0)
{
builder.Append("&");
}
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(builder.ToString());
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = timout;
StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), encoding);
return reader.ReadToEnd();
}
catch (Exception ex)
{
TXTHelper.Logs(ex.ToString());
return "";
}
}
创建Post请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/// <summary>
/// 创建Post请求
/// </summary>
/// <param name="url">Api访问地址</param>
/// <param name="requestUrl">详细方法路径</param>
/// <param name="parameters">请求参数</param>
/// <returns>Api返回值</returns>
public static string CreatePostHttpWebRequest(string url, string requestUrl, IDictionary<string, string> parameters)
{
try
{
HttpWebRequest request = WebRequest.Create(url + requestUrl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
}
byte[] data = Encoding.GetEncoding("utf-8").GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
return reader.ReadToEnd();
}
catch (Exception ex)
{
TXTHelper.Logs(ex.ToString());
return "";
}
}

/// <summary>
/// 创建Post请求
/// </summary>
/// <param name="url">Api访问地址</param>
/// <param name="requestUrl">详细方法路径</param>
/// <param name="parameters">请求参数</param>
/// <param name="encoding">字符编码</param>
/// <param name="timout ">请求超时前等待的毫秒数,默认值是 100,000 毫秒(100 秒)</param>
/// <returns>Api返回值</returns>
public static string CreatePostHttpWebRequest(string url, string requestUrl, IDictionary<string, string> parameters, Encoding encoding, int timout)
{
try
{
HttpWebRequest request = WebRequest.Create(url + requestUrl) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Timeout = timout;
//如果需要POST数据
if (!(parameters == null || parameters.Count == 0))
{
StringBuilder buffer = new StringBuilder();
int i = 0;
foreach (string key in parameters.Keys)
{
if (i > 0)
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
}
i++;
}
byte[] data = encoding.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream(), Encoding.UTF8);
return reader.ReadToEnd();
}
catch (Exception ex)
{
TXTHelper.Logs(ex.ToString());
return "";
}
}