zoukankan      html  css  js  c++  java
  • C# -WebAPIOperator.cs

    说明:一个用C#编写的WebAPI操作类,只写了Get Post 部分。

    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Assets.Scripts.Models
    {
        class WebAPIOperator
        {
            static string ip = ConfigMan.ReadNode("ServerSet", "ip");
            static string port = ConfigMan.ReadNode("ServerSet", "port");
            static string baseUri = "http://" + ip + ":" + port;
            /// <summary>
            /// 服务器通信状态
            /// </summary>
            public static bool NetState = true;
    
            public static HttpClient httpClient;
    
            #region CTOR
            private WebAPIOperator()
            {
                httpClient.BaseAddress = new Uri(baseUri);
                httpClient.DefaultRequestHeaders.Accept.Clear();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("Application/json"));
            }
            #endregion
    
            #region Async Task
            public static async Task RunAsync()
            {
                httpClient.BaseAddress = new Uri(baseUri);
                httpClient.DefaultRequestHeaders.Accept.Clear();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("Application/json"));
    
                try
                {
                    //执行API任务
                }
                catch (Exception)
                {
                    throw;
                }
            }
            #endregion
    
            #region init
            public static void initAPI()
            {
                ip = ConfigMan.ReadNode("ServerSet", "ip");
                port = ConfigMan.ReadNode("ServerSet", "port");
                baseUri = "http://" + ip + ":" + port;
                httpClient = new HttpClient();
                httpClient.BaseAddress = new Uri(baseUri);
                httpClient.DefaultRequestHeaders.Accept.Clear();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("Application/json"));
                //系统默认超时100s
                //https://docs.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient.timeout?view=netframework-4.8#System_Net_Http_HttpClient_Timeout
                //httpClient.Timeout = TimeSpan.FromMinutes(1);//超时60s
            }
            #endregion
    
            #region Get
            /// <summary>
            /// WebAPI Get方法,返回JObject
            /// </summary>
            /// <param name="uri">带参数的uri</param>
            /// <returns></returns>
            public static async Task<JObject> GetAsync(string uri)
            {
                JObject o = null;
                try
                {
                    HttpResponseMessage response = new HttpResponseMessage();
                    response = await httpClient.GetAsync(uri);
                    if (response != null && response.IsSuccessStatusCode)
                    {
                        string jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
                        JObject jobj = JObject.Parse(jsonStr);//转换为JObject
                                                              //o=...
                                                              //保存数据到文件等
                                                              //List_Screen.Items.Add(jsonStr);
                        o = jobj;
                        NetState = true;
                    }
                    else
                    {
                        NetState = false;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    //更新网络状态
                    NetState = false;
                    //Log4NetHelper.Error("网络掉线", ex);
                }
                return o;
            }
            /// <summary>
            /// WebAPI GET方法,返回string json,用于反序列化
            /// </summary>
            /// <param name="uri"></param>
            /// <returns></returns>
            public static async Task<string> GetAsync_uri(string uri)
            {
                string jsonStr = "";
                try
                {
                    HttpResponseMessage response = await httpClient.GetAsync(uri);
                    if (response.IsSuccessStatusCode)
                    {
                        jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
                                                                             //JObject jobj = JObject.Parse(jsonStr);//转换为JObject
                                                                             //o=...
                                                                             //保存数据到文件等
                                                                             //List_Screen.Items.Add(jsonStr);
                                                                             //o = jobj;
                    }
                    NetState = true;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    //更新网络状态
                    NetState = false;
                    //RoutedEventArgs args = new RoutedEventArgs(UpdateNetStateEvent);
                    //new ImageButton().RaiseEvent(args);
                    //Log4NetHelper.Error("网络掉线", ex);
                }
    
                return jsonStr;
            }
            #endregion
    
            #region POST
            public static async Task<string> PostAsync(string uri, Object obj)
            {
                string o = "";
                string jsonStr = JsonConvert.SerializeObject(obj);
                HttpResponseMessage response = await httpClient.PostAsJsonAsync<Object>(uri, obj);
                //response.EnsureSuccessStatusCode();//响应失败时,用于触发异常
                //return response.Headers.Location;
                if (response.IsSuccessStatusCode)
                {
                    //string jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
                    //JObject jobj = JObject.Parse(jsonStr);
                    //o = jobj;
                    //o = await response.Content.ReadAsAsync<object>();
                    o = await response.Content.ReadAsStringAsync();
                }
                return o;
            }
            public static async Task<object> PostAsync(string uri, string userName, string password)
            {
                Object o = null;
                HttpContent httpContent = new StringContent("loginName=" + userName + "&password=" + password);
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
                HttpResponseMessage response = await httpClient.PostAsync(uri, httpContent);
                if (response.IsSuccessStatusCode)
                {
                    string jsonStr = await response.Content.ReadAsStringAsync();//获取JSON字符串
                    JObject jobj = JObject.Parse(jsonStr);
                    o = jobj;
                }
                return o;
            }
            #endregion
    
            #region PUT
            //static async Task<Object> PutAsync(string uri, Object o)
            //{
            //    HttpResponseMessage response = await httpClient.PutAsJsonAsync<Object>(uri + "//id=" + 123, o);
            //    response.EnsureSuccessStatusCode();
            //    o = await response.Content.ReadAsAsync<Object>();
            //    return o;
        }
        #endregion
    
        #region Delete
        //static async Task<HttpStatusCode> DeleteAsync(string uri, string id)
        //{
        //    HttpResponseMessage response = await httpClient.DeleteAsync(uri + "//" + id);
        //    return response.StatusCode;
        //}
        #endregion
    
    }
  • 相关阅读:
    VSCode 预览 .md 文件
    ubuntu 16.04安装visual studio code 提示libnss3版本低:NSS >= 3.26 is required
    spring-tool-suite(STS) 创建 spring boot项目
    win10正式版开始菜单无法打开,右边的网络连接、操作中心也打不开
    nginx配置事例
    spring 集成 redis -- pub/sub
    springMVC--全局异常处理
    dubbo入门使用
    dubbo配置约束
    zookeeper安装与集群搭建
  • 原文地址:https://www.cnblogs.com/nick-jd/p/12420245.html
Copyright © 2011-2022 走看看