usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Http;usingSystem.Text;usingSystem.Threading.Tasks;usingNewtonsoft.json;namespaceDemo. apiclient{ Public classwebapiclient {Private ReadOnly string_host; Private ReadOnly string_authtoken; PublicWebapiclient (stringhost) { This. _host =host; } PublicWebapiclient (stringHoststringtoken) { This. _host =host; This. _authtoken =token; } Public voidGet<t> (stringAPI, Action<t>callback) { using(varHttpClient =newclient ()) { varResponse=Httpclient.getasync (Fulladdressapi (API)). Result; Callback (Jsonconvert.deserializeobject<T>(response. Content.readasstringasync (). Result)); } } PrivateHttpClient newclient () {varHandler =NewHttpclienthandler {automaticdecompression=Decompressionmethods.gzip}; varClient =NewHttpClient (handler); if(!string. IsNullOrEmpty (_authtoken)) client. Defaultrequestheaders.authorization=NewSystem.Net.Http.Headers.AuthenticationHeaderValue ("Basic", _authtoken); returnclient; } //Post Submission Public voidPost<t, P> (stringAPI, P data, action<t>callback) { using(varHttpClient =newclient ()) { varresult =httpclient. Postasjsonasync (Fulladdressapi (API), data). Result; if(Result = =NULL) Throw NewException ("result is null!"); if(result.) Issuccessstatuscode) {vars =result. Content.readasstringasync (). Result; if(s! =NULL) Callback (Jsonconvert.deserializeobject<T>(s)); } Else Throw NewException (result. Reasonphrase); } } Public voidPost<t> (stringAPI, dictionary<string,string> Parameters, action<t>callback) { using(HttpClient HttpClient =NewHttpClient ()) { varUri =NewStringBuilder (); Uri.append (FULLADDRESSAPI (API)); if(Parameters! =NULL&& parameters. Count >0) {uri.append ("?"); Parameters. ToList (). ForEach (S= = {Uri.append (s.key); Uri.append ("="); Uri.append (S.value); Uri.append ("&"); }); Uri.remove (Uri.length-1,1); } varResult =httpclient.postasync (uri.tostring (),NULL). Result; if(Result = =NULL) Throw NewException ("result is null!"); if(result.) Issuccessstatuscode) {vars =result. Content.readasstringasync (). Result; if(s!=NULL) Callback (Jsonconvert.deserializeobject<T>(s)); } } } Private stringFulladdressapi (stringAPI) { return string. Format ("{0}/{1}", _host. TrimEnd ('/'), API. TrimStart ('/')); } }}
Example calling code:
usingDemo. Publicdatas;usingDemo. Model;usingDemo. apiclient;usingNewtonsoft.json;namespacedemo{classProgram {Static voidMain (string[] args) { //Login Demo varHost ="http://localhost:38362"; //var api = Api.Login.Login4WinForm; varAPI ="/api/loginapi"; varLoginmodel =NewLoginmodel () {account ="123", Password ="123", Orgcode ="123"}; NewWebapiclient (host). Post<actionresult<logininfo>, loginmodel> (API, Loginmodel, result = ={Console.WriteLine (Jsonconvert.serializeobject (Result)); }); } }}
Http Client Request