C#请求Web API
一、 C# HTTP请求
C# 中 主要使用HttpWebRequest 类、HttpWebResponse类、 HTTP 协议和服务器交互,获取WebAPI服务。通常是通过 GET 和 POST 两种方式来 对数据进行获取和提交。
- 1. HTTP Web请求类:HttpWebRequest ,继承自WebRequest类,位于System.Net命名空间
常用属性
l Method 设置请求方式
l Accept 设置HTTP标头的值
l ContentType 设置内容格式
常用方法
l Create()创建HTTP Web请求对象
l GetResponse() 获取服务器返回的资源
l GetRequestStream() 获取用于写入请求数据的流对象
- 2. HTTP Web响应类:HttpWebResponse ,继承自WebResponse, 位于System.Net命名空间
常用方法
l GetResponseStream()获取来自服务器响应的流对象
- 3. C#、HTTP通过GET方式获取数据
通过在网络地址附加参数来完成数据的提交,如:http://example/api/user?name=aa
1) 创建HTTP Web请求对象
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:49795/api/Student");
2) 设置请求方式
request.Method = "get";
3) 创建HTTP Web响应对象,获取服务器返回的资源
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
4) 使用流阅读器读取服务器返回的数据
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
richTextBox1.Text = reader.ReadToEnd();
reader.Close();
- 4. C#、HTTP通过POST方式提交数据
POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 GET 方式一样。
这里需要通过对象序列化工具,将对象序列化为 JSON 数据,通过 POST 方式在页面内容中传递到服务器端。
可以使用 Newtonsoft.Json.dll 对数据进行序列化。
1) 准备请求的数据对象
2) 将对象序列化为JSON字符串,并将JSON字符串转为字节数组
var json = Newtonsoft.Json.JsonConvert.SerializeObject(stu);
byte[] buffer = Encoding.UTF8.GetBytes(json);
3) 创建HTTP Web请求对象
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:49795/api/Student");
4) 设置请求方式 、HTTP标头、内容格式
request.Method = "post";
request.Accept = "*/*";
request.ContentType = "application/json";
5) 提交请求,将字节数组内容写请求数据的流对象
request.GetRequestStream().Write(buffer, 0, buffer.Length);
6) 服务器应答:获取服务器返回的资源
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
7) 使用流阅读器读取服务器返回数据
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
richTextBox1.Text = reader.ReadToEnd();
}
- 5. 制作HTTP请求助手类
Delete请求方式与Get请求方式类似都是通过地址传递参数,Put请求与POST请求方式相似都是通过Request Body提交数据,根据这两个方式我们可以将前一示例提交代码进行提炼,可以制作出一个HTTP请求的库专门用来C#请求Web API。
class HTTP_Helper
{
/// <summary>
/// C#请求Get,Delete WebAPI
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="method">请求方式</param>
/// <returns>服务器返回的数据字符串</returns>
public static string HttpGet(string url, string method)
{
//创建HTTP Web请求对象
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = method;//设置请求方法
request.Accept = "*/*";//设置HTTP标头的值
request.ContentType = "application/json";//设置内容格式
//如果服务端应答状态码不是200系列的会触发异常
try
{
//得到服务器应答
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//使用流阅读器读取服务器返回数据
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
//全部读取服务器返回数据并返回
return reader.ReadToEnd();
}
}
catch
{
return null;
}
}
/// <summary>
/// C#请求Post,Put WebAPI
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="method">请求方式</param>
/// <param name="body">请求数据内容</param>
/// <returns>服务器返回的数据字符串</returns>
public static string HttPost(string url, string method, string body)
{
//将请求内容字符串转换成byte[] 数组
byte[] buffer = Encoding.UTF8.GetBytes(body);
//创建HTTP Web请求对象
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = method;//设置请求方法
request.Accept = "*/*";//设置HTTP标头的值
request.ContentType = "application/json";//设置内容格式
//将字节序列写入请求的流中
request.GetRequestStream().Write(buffer, 0, buffer.Length);
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
//全部读取服务器返回数据并返回
return reader.ReadToEnd();
}
}
catch
{
return null;
}
}
}
二、 WinForm请求Web API
案例:通过4个操作了解在WinForm中调用Web API的做法