記錄一個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.pswp.cn/pingmian/86683.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86683.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86683.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習:PyTorch卷積神經網絡之圖像入門

本文目錄&#xff1a; 一、二值圖像二、**灰度圖像*三、**索引圖像**四、**真彩色RGB圖像****星空圖** 前言&#xff1a;這篇文章開始講解CNN&#xff0c;此前講解的人工神經網絡&#xff08;ANN&#xff09;如果有小伙伴還不清楚&#xff0c;一定要多看&#xff0c;多練習&…

PyTorch RNN實戰:快速上手教程

PyTorch實現RNN的實例 以下是一個使用PyTorch實現RNN的實例代碼,包含數據準備、模型定義、訓練和評估步驟。 RNN流程圖 RNN流程圖,在使用t來表示當前時間點(序列中的第t項),RNN接收所有先前內容得單一個表示h和關于序列最新項的信息,RNN將這些信息合并到迄今為止所有看…

C++項目快速配置SQLite

前言&#xff1a;完全沒接觸過數據庫&#xff0c;但老師課程設計要求數據存儲在數據庫怎么辦&#xff1f;&#xff1f;&#xff1f;主包看了些網絡上的資源&#xff0c;覺得講得都不是很能快速上手&#xff0c;所以決定自己寫一篇博客 SQLiteCpp是一個基于 C 封裝的 SQLite 操…

ArcGIS中對輸入面圖層A的相交問題批量處理的實現方法

一、背景及意義 在各種數據建庫中&#xff0c;拓撲錯誤是必須處理的&#xff0c;其中最常見的是重疊問題&#xff0c;我們常用拓撲工具來檢查重疊&#xff0c;但是由于拓撲工具只能作為檢查且不能批量修改&#xff0c;此時我們可以使用“相交”工具來檢查出重疊部分&#xff0…

【學習筆記】3.3 Decoder-Only PLM

參考資料&#xff1a;https://github.com/datawhalechina/happy-llm Decoder-Only是當前大型語言模型&#xff08;LLM&#xff09;的基礎架構&#xff0c;如 GPT 系列。GPT 是 Decoder-Only 架構的代表&#xff0c;而開源 LLM 如 LLaMA 也是在 GPT 架構基礎上發展而來的。 3…

主流的Attention Backend介紹

Attention Backend 技術背景 注意力&#xff08;Attention&#xff09;機制在深度學習中扮演著關鍵角色&#xff0c;它幫助模型在處理序列數據時&#xff0c;有選擇地關注輸入中的重要信息。然而&#xff0c;傳統的注意力計算往往受到內存訪問和算力分配的雙重制約&#xff0c…

Linux內存取證

我們先把linux取證文件放到kali中&#xff0c;然后這里的Ubuntu18.04-5.4.0-84-generic.zip需要不解壓直接放到vol工具中 然后把Ubuntu18.04-5.4.0-84-generic放到vol工具中&#xff0c;然后開始去這個&#xff0c;使用vol工具查看linux的版本信息 這個LinuxUbuntu18_04-5_4_0-…

使用docx4j 實現word轉pdf(linux亂碼處理)

由于系統之前使用了是itext進行轉換的&#xff0c;現在已經不是開源的工具了&#xff0c;需要收費&#xff0c;然后進行改造&#xff0c;具體處理如下。 <dependency><groupId>org.docx4j</groupId><artifactId>docx4j</artifactId><version…

C++ - vector 的相關練習

目錄 前言 1、題1 只出現一次的數字 &#xff1a; 解法一&#xff1a;遍歷 參考代碼&#xff1a; 解法二&#xff1a;按位異或 參考代碼&#xff1a; 解法三&#xff1a;哈希表 參考代碼&#xff1a; 2、題2 楊輝三角&#xff1a; 參考代碼&#xff1a; 總結 前言 …

JDK 1.8 Stream API:集合流處理深度解析

JDK 1.8 Stream API&#xff1a;集合流處理深度解析 摘要&#xff1a;Stream API 是 JDK 1.8 的革命性特性&#xff0c;它將集合操作從傳統迭代升級為聲明式函數式處理。Stream API三個階段&#xff08;創建→中間操作→終端操作&#xff09;詳解流處理機制&#xff0c;輔以代…

2025學年湖北省職業院校技能大賽 “信息安全管理與評估”賽項 樣題卷(二)

2025學年湖北省職業院校技能大賽 “信息安全管理與評估”賽項 樣題卷&#xff08;二&#xff09; 第一部分&#xff1a;第二部分&#xff1a;網絡安全事件響應、數字取證調查、應用程序安全任務書任務 1&#xff1a;應急響應&#xff08;可以培訓有答案&#xff09;任務 2&…

AiPy實戰(5):效率革命!5分鐘構建行業分析報告

在當今數字化時代&#xff0c;數據呈指數級增長&#xff0c;行業分析報告對于企業的決策制定愈發關鍵。傳統上&#xff0c;撰寫一份行業分析報告&#xff0c;需要分析師耗費大量時間從各類數據庫、新聞資訊平臺、行業報告中手動收集數據&#xff0c;再進行整理、分析和撰寫&…

docker小白自存-windows系統通過docker安裝n8n-nodes-puppeteer

n8n上直接在社區下載puppeteer節點&#xff0c;使用時會報錯說沒有chromium依賴。 找到了n8n-nodes-puppeteer的github試圖解決 根據他的docker安裝指南執行&#xff0c;運行容器時會報exec /docker-custom-entrypoint.sh: no such file or directory &#xff08;明明文件都有…

腳本shebang的作用與使用方法

#!&#xff08;稱為 shebang 或 hashbang&#xff09;是腳本文件開頭的前兩個字符&#xff0c;用于告訴操作系統應該使用哪個解釋器來執行該腳本。 核心作用&#xff1a; 指定解釋器&#xff1a; 明確告訴系統運行這個腳本時應該調用哪個程序&#xff08;解釋器&#xff09;來…

【大模型學習 | BERT 量化學習 (1)】

BERT 情感分析 一、 數據集加載與模型訓練 from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments from datasets import load_dataset import torch import numpy as np from sklearn.metrics import accuracy_score mode_na…

用低通濾波優化串口或485 通信指示燈電路

常見的通信指示燈電路就是簡單的把LED 連到TXD 和RXD 上&#xff0c;一有動靜就閃一下。問題是&#xff0c;如果波特率很高&#xff0c;一次通信時間很短&#xff0c;相當于占空比很低&#xff0c;LED 閃爍的亮度就很弱&#xff0c;不容易觀察。比如MODBUS 通信&#xff0c;波特…

【純干貨】調整word目錄中的行距以及右對齊頁碼

1.問題展現 目錄生成會遇到一些奇葩現象 所以到了展現技術力的時候了【doge】 2.解決word目錄中的行距問題 選中目錄中的文字-》段落 此時你可能勾選了圖片中的一個以上&#xff0c;把他們都取消了&#xff0c; 由于一個目錄的標題對應一個樣式&#xff0c;第一個也可以取消 …

pandas 優雅處理值類型為list的列的csv讀寫問題

文章目錄 直接存儲join list 變成字符串存儲json.dumps序列化存儲以及json.loads反序列化讀取總結 之所以分析這個問題,是因為讀者在跟第三方數據供應商對接數據的時候,老是會遇到數據加載都會出錯的問題,其中一個原因就是list類型數據沒有正確儲存,于是筆者在這篇文章里面詳細…

一種解決 OpenWrt 安裝 docker 之后局域網的設備之間無法互相訪問通信的方法

文章目錄 一、問題背景二、解決方案&#xff08;方法一&#xff09;修改全局設置的 轉發&#xff08; forward&#xff09; 為 接受&#xff08;ACCEPT&#xff09;&#xff08;方法二&#xff09;設置 net.bridge.bridge-nf-call-iptables0 并將 docker 的容器網絡設置為host …

Leetcode百題斬-貪心

貪心也是一個很有意思的專題&#xff0c;能遇到很多神奇的思路。 但這個專題&#xff0c;leetcode也沒放Hard&#xff0c;果然是怕這種玄學專題上點難度大家罩不住。那就很快了&#xff0c;直接過 763. Partition Labels[Medium] 思路&#xff1a;將字母串分組&#xff0c;相…