前端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

最新文章

  1. 听说你们要开始学C了
  2. lnmp下启动mysql报错 The server quit without updating PID file
  3. [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
  4. Reactor模式详解
  5. ie8兼容border-radius方法
  6. cocos2d-x 添加纹理自动回收机制
  7. SQL Server查询性能优化——堆表、碎片与索引(一)
  8. iOS分享 - AFNetworking之多图片/文件上传
  9. 存储过程--表变量和while简单运用
  10. JNI 可变印刷
  11. linux_ubuntu12.04 卸载和安装mysql、远程访问、not allowed
  12. hibernate操作步骤(代码部分)
  13. Serv-u Mysql数据库用户
  14. [Node.js] 2、利用node-git-server快速搭建git服务器
  15. 一个二维码--&gt;网址--&gt;iOS/Android跳转
  16. 『骑士精神 IDA*』
  17. MySQL数据库视图(view),视图定义、创建视图、修改视图
  18. 大数据hadoop生态圈
  19. jQuery----JQuery动画(hide()和show())(上)
  20. 基于jQuery商品分类选择提交表单代码

热门文章

  1. A Child&#39;s History of England.7
  2. accommodate ~ ache
  3. 【leetcode】36. Valid Sudoku(判断能否是合法的数独puzzle)
  4. 快速挂起VIM以及调出被挂起的VIM的方法
  5. Linux基础命令---host域名查询工具
  6. Linux学习 - 正则表达式
  7. Java_zip_多源文件压缩到指定目录下
  8. Spring(3):AOP面向切面编程
  9. 【Java基础】Java 注解详解
  10. 【Linux】【Services】【Web】Haproxy