当前位置: 首页 > news >正文

记录一个C#/.NET的HTTP工具类

记录一个C#/.NET的HTTP工具类

using Serilog;
using System.Net;
using System.Text;
using System.Text.Json;namespace UProbe.Common.Comm.Http
{public class HttpClientHelper{/// <summary>/// 发送HttpGet请求/// </summary>/// <typeparam name="T"></typeparam>/// <param name="url"></param>/// <returns></returns>public static T? HttpGet<T>(string url){using (HttpClient client = new HttpClient()){client.Timeout = TimeSpan.FromSeconds(30);try{var response = client.GetAsync(url).Result;if (response != null && response.StatusCode == HttpStatusCode.OK){var responseStr = response.Content.ReadAsStringAsync().Result;if (string.IsNullOrEmpty(responseStr) == false){return JsonSerializer.Deserialize<T>(responseStr);}}else{Log.Warning($"请求异常 url={url},status={response?.StatusCode}");}}catch (Exception ex){Log.Error($"请求异常 url={url},{ex.ToString()}");}return default(T);}}/// <summary>/// 发送HttpPost请求/// </summary>/// <typeparam name="T"></typeparam>/// <param name="url"></param>/// <param name="content"></param>/// <returns></returns>public static T? HttpPost<T>(string url, string content = ""){using (HttpClient client = new HttpClient()){client.Timeout = TimeSpan.FromSeconds(30);var request = new HttpRequestMessage(HttpMethod.Post, url);request.Content = new StringContent(content, Encoding.UTF8, "application/json");try{var response = client.Send(request);if (response != null && response.StatusCode == HttpStatusCode.OK){var responseStr = response.Content.ReadAsStringAsync().Result;if (string.IsNullOrEmpty(responseStr) == false)return JsonSerializer.Deserialize<T>(responseStr);}else{Log.Warning($"请求异常 url={url},content={content},status={response?.StatusCode}");}}catch (Exception ex){Log.Error($"请求异常 url={url},content={content},{ex.ToString()}");}return default(T);}}/// <summary>/// 发送HttpPost请求/// </summary>/// <typeparam name="T"></typeparam>/// <param name="url"></param>/// <param name="content"></param>/// <param name="token"></param>/// <returns></returns>public static HttpResult<T> HttpPostX<T>(string url, string content = "", string token = ""){var returnDto = new HttpResult<T>();using (HttpClient client = new HttpClient()){client.Timeout = TimeSpan.FromSeconds(30);var request = new HttpRequestMessage(HttpMethod.Post, url);request.Content = new StringContent(content, Encoding.UTF8, "application/json");if (!string.IsNullOrEmpty(token)){request.Headers.Add("Authentication", token);}try{var response = client.Send(request);return HandleResopnse<T>(response);}catch (Exception ex){Log.Error($"请求异常 url={url},content={content},msg={ex.ToString()}");}return returnDto;}}/// <summary>/// 发送HttpPost请求/// </summary>/// <typeparam name="T"></typeparam>/// <param name="url"></param>/// <param name="token"></param>/// <returns></returns>public static HttpResult<T> HttpGetX<T>(string url, string token = ""){var returnDto = new HttpResult<T>();using (HttpClient client = new HttpClient()){client.Timeout = TimeSpan.FromSeconds(30);var request = new HttpRequestMessage(HttpMethod.Get, url);if (!string.IsNullOrEmpty(token)){request.Headers.Add("Authentication", token);}try{var response = client.Send(request);return HandleResopnse<T>(response);}catch (Exception ex){Log.Error($"请求异常 url={url},msg={ex}");}return returnDto;}}public static HttpResult<T> HandleResopnse<T>(HttpResponseMessage response){var returnDto = new HttpResult<T>();if (response != null && response.StatusCode == HttpStatusCode.OK){returnDto.StatusCode = 200;returnDto.IsSuccess = true;returnDto.Msg = "请求成功";var responseStr = response.Content.ReadAsStringAsync().Result;if (string.IsNullOrEmpty(responseStr) == false){var responseObj = JsonSerializer.Deserialize<T>(responseStr);returnDto.Result = responseObj;}}else if (response != null && response.StatusCode == HttpStatusCode.Unauthorized){returnDto.StatusCode = 401;returnDto.IsSuccess = false;returnDto.Msg = "未认证";var responseStr = response.Content.ReadAsStringAsync().Result;if (string.IsNullOrEmpty(responseStr) == false){returnDto.Msg += $":{responseStr}";}Log.Warning($"请求异常 status={response?.StatusCode},返回信息={responseStr}");}else{returnDto.IsSuccess = false;returnDto.StatusCode = response == null ? 500 : (int)response.StatusCode;returnDto.Msg = "请求异常";var responseStr = response?.Content.ReadAsStringAsync().Result;if (string.IsNullOrEmpty(responseStr) == false){returnDto.Msg += $":{responseStr}";}Log.Warning($"请求异常 status={response?.StatusCode},返回信息={responseStr}");}return returnDto;}}
}
http://www.lqws.cn/news/545095.html

相关文章:

  • Feign 实战指南:从 REST 替代到性能优化与最佳实践
  • 文法、正规式相关习题
  • Linux系统(信号篇)信号的保存
  • WinAppDriver 自动化测试:JavaScript 篇
  • gRPC技术解析与python示例
  • Python基础知识之文件
  • JMH (Java Microbenchmark Harness)
  • .NET MAUI跨平台串口通讯方案
  • (LeetCode 面试经典 150 题 ) 238. 除自身以外数组的乘积 (前缀和)
  • LeetCode 312 戳气球题解(Swift)+ 区间 DP 原理详解 + 可运行代码
  • WSL升级到24.04
  • 使用 asp.net core webapi 导出数据文件
  • .NetCore+Vue快速生产框架开发详细方案
  • LeetCode 349题解 | 两个数组的交集
  • 苍穹外卖day5--Redis设置店铺营业状态
  • 基于ubuntu 22.04环境安装NEURON仿真器
  • jenkins中执行python脚本导入路径错误
  • 跟着AI学习C#之项目实战-电商平台 Day3
  • 《聊一聊ZXDoc》之汽车服务导向SOME/IP
  • 自动登录脚本神器-Mac电脑实现自动登录堡垒机并自动输入账号密码跳转不同机器环境
  • uniapp处理后端返回的html字符串
  • spring-security-oauth2系列:自定义认证服务器
  • 为什么python处理csv文件将某个值替换成另一个值并另存后,csv文件的大小减小了一半
  • Nginx 与 Apache:有什么区别?哪种服务器最适合您?
  • 【数据挖掘】数据采集和预处理
  • 如何确保京东商品数据采集的准确性和及时性?
  • 【lua】Linux上安装lua和luarocks包管理工具
  • 提升AI准确性的关键:精准添加上下文
  • 【NodeJs】【npm】npm安装electron报错
  • Python Async 编程快速入门 | 超简明异步协程指南