Winform中使用HttpClient与后端api服务进行交互
2024-08-29 23:20:49
前端js可以使用ajax、axios发出http请求
在c#中winform、控制台等可以通过WebRequest、WebClient、HttpClient
有关三个类的性能对比大家可以自己搜一下,这里我主要使用和封装了HttpClient类,对于ResultDto大家可以根据所需进行修改或删除
public class HttpHelper
{
private static readonly object LockObj = new object();
private static HttpClient client = null;
private static readonly string BASE_ADDRESS = "http://localhost:1229/";
public HttpHelper()
{
GetInstance();
}
/// <summary>
/// 制造单例
/// </summary>
/// <returns></returns>
public static HttpClient GetInstance()
{
if (client == null)
{
lock (LockObj)
{
if (client == null)
{
client = new HttpClient() {
BaseAddress = new Uri(BASE_ADDRESS)
};
}
}
}
return client;
}
/// <summary>
/// 异步Post请求
/// </summary>
/// <param name="url">请求地址</param>
/// <param name="strJson">传入的数据</param>
/// <returns></returns>
public async Task<string> PostAsync(string url,string strJson)
{
try
{
HttpContent content = new StringContent(strJson);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
HttpResponseMessage res = await client.PostAsync(url,content);
if (res.StatusCode == System.Net.HttpStatusCode.OK)
{
string resMsgStr = await res.Content.ReadAsStringAsync();
return resMsgStr;
}
else
{
return null;
}
}
catch (Exception)
{
return null;
}
}
/// <summary>
/// 同步Post
/// </summary>
/// <param name="url"></param>
/// <param name="strJson"></param>
/// <returns></returns>
public string Post(string url, string strJson)
{
try
{
HttpContent content = new StringContent(strJson);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
//client.DefaultRequestHeaders.Connection.Add("keep-alive");
//由HttpClient发出Post请求
Task<HttpResponseMessage> res = client.PostAsync(url, content);
if (res.Result.StatusCode == System.Net.HttpStatusCode.OK)
{
string resMsgStr = res.Result.Content.ReadAsStringAsync().Result;
return resMsgStr;
}
else
{
return null;
}
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 异步Post请求
/// </summary>
/// <typeparam name="TResult">返回参数的数据类型</typeparam>
/// <param name="url">请求地址</param>
/// <param name="data">传入的数据</param>
/// <returns></returns>
public async Task<TResult> PostAsync<TResult>(string url, object data)
{
try
{
var jsonData = JsonConvert.SerializeObject(data);
HttpContent content = new StringContent(jsonData);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
HttpResponseMessage res = await client.PostAsync(url, content);
if (res.StatusCode == System.Net.HttpStatusCode.OK)
{
string resMsgStr = await res.Content.ReadAsStringAsync();
var result= JsonConvert.DeserializeObject<ResultDto<TResult>>(resMsgStr);
return result != null ? result.Data : default;
}
else
{
MessageBox.Show(res.StatusCode.ToString());
return default;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return default;
}
}
/// <summary>
/// 同步Get请求
/// </summary>
/// <param name="url">请求地址</param>
/// <returns></returns>
public string Get(string url)
{
try
{
var responseString = client.GetStringAsync(url);
return responseString.Result;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 异步Get请求
/// </summary>
/// <param name="url">请求地址</param>
/// <returns></returns>
public async Task<string> GetAsync(string url)
{
try
{
var responseString =await client.GetStringAsync(url);
return responseString;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 异步Get请求
/// </summary>
/// <typeparam name="TResult">返回参数的数据</typeparam>
/// <param name="url">请求地址</param>
/// <returns></returns>
public async Task<TResult> GetAsync<TResult>(string url)
{
try
{
var resMsgStr = await client.GetStringAsync(url);
var result = JsonConvert.DeserializeObject<ResultDto<TResult>>(resMsgStr);
return result != null ? result.Data : default;
}
catch (Exception ex)
{
return default(TResult);
}
}
}
public class ResultDto<TResult>
{
public string Msg { get; set; }
public TResult Data { get; set; }
public bool Success { get; set; }
}
}
记录我在博客园发布的第一篇文章,后续会把本人在csdn的文章都迁移过来
https://blog.csdn.net/hyx1229
最新文章
- 听说你们要开始学C了
- lnmp下启动mysql报错 The server quit without updating PID file
- [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
- Reactor模式详解
- ie8兼容border-radius方法
- cocos2d-x 添加纹理自动回收机制
- SQL Server查询性能优化——堆表、碎片与索引(一)
- iOS分享 - AFNetworking之多图片/文件上传
- 存储过程--表变量和while简单运用
- JNI 可变印刷
- linux_ubuntu12.04 卸载和安装mysql、远程访问、not allowed
- hibernate操作步骤(代码部分)
- Serv-u Mysql数据库用户
- [Node.js] 2、利用node-git-server快速搭建git服务器
- 一个二维码-->;网址-->;iOS/Android跳转
- 『骑士精神 IDA*』
- MySQL数据库视图(view),视图定义、创建视图、修改视图
- 大数据hadoop生态圈
- jQuery----JQuery动画(hide()和show())(上)
- 基于jQuery商品分类选择提交表单代码