記錄一個C#/.NET的HTTP工具類
using Serilog ;
using System. Net ;
using System. Text ;
using System. Text. Json ; namespace UProbe. Common. Comm. Http
{ public class HttpClientHelper { 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 ) ; } } 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 ) ; } } 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; } } 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; } }
}