目录
1、调用请求的几种方式(有GET、POST、DELETE、PUT)
2、测试调用请求方式,向后端接口发起请求并接收接口返回的数据
1、调用请求的几种方式(有GET、POST、DELETE、PUT)
namespace HttpRequestCore
{
public class RequestCore
{
/// <summary>
/// Get请求
/// </summary>
/// <param name="path">请求路径</param>
/// <param name="param">参数</param>
/// <param name="timeout">请求超时时间,以毫秒为单位</param>
/// <returns></returns>
public static string ApiGet(string path, string param, int timeout)
{
string pathAndParam = path;
if (!string.IsNullOrEmpty(param))
{
pathAndParam += "?" + param;
}
//创建一个HttpWebRequest对象,用来请求后台
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathAndParam);
request.Method = "GET"; //请求方式:GET,POST,PUT, DELETE
request.Timeout = timeout; //请求超时时间
//request.Headers.Add("token", Token); //设置请求头,接口拦截器那边可以获取请求头内容判断
try
{
WebResponse response = request.GetResponse(); //相当于后台返回的对象
Stream stream = response.GetResponseStream(); //response流
StreamReader sr = new StreamReader(stream, Encoding.UTF8);
string json = sr.ReadToEnd(); //读取接口返回的数据
//释放对象
response.Close();
sr.Close();
stream.Close();
return json;
}
catch(Exception e)
{
return "响应出现错误:"+e.Message;
}
}
/// <summary>
/// Post请求
/// </summary>
/// <param name="path">请求路径</param>
/// <param name="param">参数</param>
/// <param name="body">主体内容</param>
/// <param name="timeout">请求超时时间,以毫秒为单位</param>
/// <returns></returns>
public static string ApiPost(string path, string param, string body, int timeout = 5000)
{
string pathAndParam = path;
if (!string.IsNullOrEmpty(param))
{
pathAndParam += "?" + param;
}
//创建一个HttpWebRequest对象,用来请求后台
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathAndParam);
request.Method = "POST";
request.Timeout = timeout;
request.ContentType = "application/json;UTF-8"; //设置类型
//request.Headers.Add("token", Token); //设置请求头,接口拦截器那边可以获取请求头内容判断
//把主体内容添加到请求数据中
if (!string.IsNullOrEmpty(body))
{
byte[] buffer = Encoding.UTF8.GetBytes(body);
request.ContentLength = buffer.Length; //主体内容的字节长度
Stream requestStream = request.GetRequestStream(); //存放请求的数据
requestStream.Write(buffer, 0, buffer.Length); //把主体内容写到流中
}
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
string json = sr.ReadToEnd();
return json;
}
/// <summary>
/// Delete请求
/// </summary>
/// <param name="path">请求路径</param>
/// <param name="param">参数</param>
/// <param name="body">主体内容</param>
/// <param name="timeout">请求超时时间,以毫秒为单位</param>
/// <returns></returns>
public static string ApiDelete(string path, string param, int timeout = 5000)
{
string pathAndParam = path;
if (!string.IsNullOrEmpty(param))
{
pathAndParam += "?" + param;
}
//创建一个HttpWebRequest对象,用来请求后台
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathAndParam);
request.Method = "DELETE";
request.Timeout = timeout;
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
string json = sr.ReadToEnd();
//释放对象
response.Close();
sr.Close();
responseStream.Close();
return json;
}
}
}
2、测试调用请求方式,向后端接口发起请求并接收接口返回的数据
namespace HttpApiForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//接口地址
private string HttpPath { get; set; } = "http://127.0.0.1:5000";
private string Token { get; set; } = "123456";
private void btnPost_Click(object sender, EventArgs e)
{
Dictionary<string, object> dic = new Dictionary<string, object>()
{
["tName"] = "张",
["tCity"] = "郑州"
};
string json = JsonConvert.SerializeObject(dic);
string json1 = RequestCore.ApiPost($"{HttpPath}/baseUser/selects", null, json);
JsonData<List<BaseUser>> jsonData = JsonConvert.DeserializeObject<JsonData<List<BaseUser>>>(json1);
}
private void btnGet_Click(object sender, EventArgs e)
{
string json = RequestCore.ApiGet($"{HttpPath}/baseUser/selectAll", null, 5000);
//第一种解析方式
//Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
//string code = dic["code"].ToString();
//JToken jTokenData = (JToken)dic["data"];
//JToken[] jtokens = jTokenData.ToArray(); //人员集合
//JToken jTokenUser = jtokens[0]; //第一个人员
//string id = jTokenUser["id"].ToString();
//string tName = jTokenUser["tName"].ToString();
//第二种解析方式
JsonData<List<BaseUser>> jsonData = JsonConvert.DeserializeObject<JsonData<List<BaseUser>>>(json);
if (jsonData.Code != 0)
{
Console.WriteLine("失败:" + jsonData.Message);
return;
}
foreach (BaseUser user in jsonData.Data)
{
Console.WriteLine($"姓名:{user.TName},城市:{user.TCity}");
}
json = ApiGet($"{HttpPath}/baseUser/selectById", "id=1", 5000);
JsonData<BaseUser> jsonData2 = JsonConvert.DeserializeObject<JsonData<BaseUser>>(json);
}
}
public class JsonData<T>
{
public int Code { get; set; }
public string Message { get; set; }
//public List<Dictionary<string, object>> Data { get; set; }
//public List<BaseUser> Data { get; set; }
public T Data { get; set; }
}
public class BaseUser
{
public int Id { get; set; }
public string TName { get; set; }
public string TCity { get; set; }
public decimal TMoney { get; set; }
}
}