美文网首页
WebApi的调用-2.后台调用

WebApi的调用-2.后台调用

作者: 大捕猎店 | 来源:发表于2017-09-22 00:15 被阅读0次

    httpClient调用方式

    namespace SOA.Common
    {
        //httpClient调用WebApi
        public class HttpClinetHelper
        {
            public static string GetHttpClient(string serverUrl, string method, WebHeaderCollection header)
            {
                using (HttpClient client = new HttpClient())
                {
                    //如果有Basic认证的情况下,请自己封装header
                    if (header != null)
                        client.DefaultRequestHeaders.Add("Authorization", "BasicAuth " + header["Authorization"]);
    
                    var response = client.GetAsync(serverUrl + method).Result;  //拿到异步结果
                    Console.WriteLine(response.StatusCode); //确保http成功
                    return response.Content.ReadAsStringAsync().Result;
                }
            }
    
            public static string PostHttpClient(string serverUrl, string method, Dictionary<string, string> param)
            {
                using (HttpClient client = new HttpClient())
                {
                    var content = new FormUrlEncodedContent(param);
                    var response = client.PostAsync(serverUrl + method, content).Result;  //拿到异步结果
                    Console.WriteLine(response.StatusCode);//确保http成功
                    return response.Content.ReadAsStringAsync().Result;
                }
            }
        }
    }
    

    httpWebReqeust调用方式(一般使用)

    //WebRequest调用WebApi
        public class WebRequestHelper
        {
    
            /// <summary>
            ///   WebRequest的 Get 请求
            /// </summary>
            /// <param name="serverUrl" type="string">
            ///     <para>
            ///       api地址(地址+方法)     
            ///     </para>
            /// </param>
            /// <param name="paramData" type="string">
            ///     <para>
            ///       参数  
            ///     </para>
            /// </param>
            public static string GetWebRequest(string serverUrl, string paramData, WebHeaderCollection header)
            {
                string requestUrl = serverUrl;
                if (serverUrl.IndexOf('?') == -1 && paramData.IndexOf('?') == -1)
                    requestUrl += "?";
                requestUrl += paramData;
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);
                if (header != null)
                    request.Headers = header;
                request.ContentType = "application/json";
                request.Timeout = 30 * 1000;
                request.Method = "GET";
                string result = string.Empty;
                using (var res = request.GetResponse() as HttpWebResponse)
                {
                    if (res.StatusCode == HttpStatusCode.OK)
                    {
                        var reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                        result = reader.ReadToEnd();
                    }
                    return result;
                }
            }
    
            /// <summary>
            ///    WebRequest的 Post 请求  
            /// </summary>
            /// <param name="serverUrl" type="string">
            ///     <para>
            ///       api地址(地址+方法)      
            ///     </para>
            /// </param>
            /// <param name="postData" type="string">
            ///     <para>
            ///     参数    
            ///     </para>
            /// </param>
            public static string PostWebRequest(string serverUrl, string postData, WebHeaderCollection header)
            {
                var dataArray = Encoding.UTF8.GetBytes(postData);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serverUrl);
                if (header != null)
                    request.Headers = header;
                request.ContentLength = dataArray.Length;
                //设置上传服务的数据格式  
                request.ContentType = "application/json";
                request.Timeout = 30 * 1000;
                request.Method = "POST";
    
                //创建输入流  
                Stream dataStream;
                try
                {
                    dataStream = request.GetRequestStream();
                }
                catch (Exception)
                {
                    return null;//连接服务器失败  
                }
                //发送请求  
                dataStream.Write(dataArray, 0, dataArray.Length);
                dataStream.Close();
    
                //读取返回值
                string result = string.Empty;
                using (var res = request.GetResponse() as HttpWebResponse)
                {
                    if (res.StatusCode == HttpStatusCode.OK)
                    {
                        var reader = new StreamReader(res.GetResponseStream(), Encoding.UTF8);
                        result = reader.ReadToEnd();
                    }
                    return result;
                }
            }
        }
    

    封装的调用

    namespace SOA.Common
    {
        public class ApiHelper
        {
            public static readonly ApiHelper Instance = new ApiHelper();
            public string RequestApi(string method, string queryString, WebHeaderCollection header = null)
            {
                string result = WebRequestHelper.GetWebRequest(ConfigHelper.Config.ApiUrl + method, queryString, header);
    
                return result;
            }
    
            public AjaxResult RequestApi<T>(string method, string queryString, WebHeaderCollection header = null)
            {
                var result = WebRequestHelper.GetWebRequest(ConfigHelper.Config.ApiUrl + method, queryString, header);
    
                return SerializeResult<T>(result);
            }
    
            /// <summary>
            /// 序列化结果
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="result"></param>
            /// <returns></returns>
            private AjaxResult SerializeResult<T>(string result)
            {
                AjaxResult resultModel = JsonConverter.FromJsonTo<AjaxResult>(result);
                if (resultModel.Status == 0 && resultModel.Data != null && !string.IsNullOrEmpty(resultModel.Data.ToString()))
                {
                    if (resultModel.Data.ToString().IndexOf("[") == 0 && StringHelper.IsJson(resultModel.Data.ToString()))
                    {
                        resultModel.Data = JsonConverter.FromJsonTo<List<T>>(resultModel.Data.ToString());
                    }
                    else if (StringHelper.IsJson(resultModel.Data.ToString()))
                    {
                        resultModel.Data = JsonConverter.FromJsonTo<T>(resultModel.Data.ToString());
                    }
                }
                return resultModel;
            }
        }
    }
    

    StringHelper.cs 帮助类

    namespace SOA.Common
    {
        public class StringHelper
        {
            public static string AreaAttr(string defaultStr, int max = 0, string tipTitle = "", string tipid = "")
            {
                string text = "";
                if (!string.IsNullOrWhiteSpace(defaultStr))
                {
                    text = text + " tipmsg=\"" + defaultStr + "\" onfocus=\"utils.ContentKeyFocus(this)\" onblur=\"utils.ContentKeyBlur(this)\"";
                    text += " style=\"color:#999;\"";
                }
                if (max > 0)
                {
                    string text2 = text;
                    text = string.Concat(new string[]
                    {
                        text2,
                        " onkeyup=\"utils.ContentKeyUpDown2(this,",
                        max.ToString(),
                        ",'",
                        tipid,
                        "',0,'",
                        tipTitle,
                        "')\""
                    });
                }
                return text;
            }
            public static string InputAttr(string val, string defaultStr, int max = 0, string tipTitle = "", string tipid = "")
            {
                string text = "";
                if (!string.IsNullOrWhiteSpace(val))
                {
                    text = text + " value=\"" + val + "\"";
                }
                if (!string.IsNullOrWhiteSpace(defaultStr))
                {
                    if (string.IsNullOrWhiteSpace(val))
                    {
                        text = text + " value=\"" + defaultStr + "\"";
                    }
                    text = text + " tipmsg=\"" + defaultStr + "\" onfocus=\"utils.ContentKeyFocus(this)\" onblur=\"utils.ContentKeyBlur(this)\"";
                    text += " style=\"color:#999;\"";
                }
                if (max > 0)
                {
                    string text2 = text;
                    text = string.Concat(new string[]
                    {
                        text2,
                        " onkeyup=\"utils.ContentKeyUpDown2(this,",
                        max.ToString(),
                        ",'",
                        tipid,
                        "',0,'",
                        tipTitle,
                        "')\""
                    });
                }
                return text;
            }
            public static string WapEncode(string source)
            {
                return (!string.IsNullOrEmpty(source)) ? source.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("‘", "&apos;").Replace("\"", "&quot;").Replace("$", "&#x24;").Replace(" ", "&nbsp;") : "";
            }
            public static string SubStr(string srcStr, int len)
            {
                string result;
                if (len < 1)
                {
                    result = string.Empty;
                }
                else
                {
                    if (string.IsNullOrEmpty(srcStr))
                    {
                        result = srcStr;
                    }
                    else
                    {
                        int byteCount = System.Text.Encoding.Default.GetByteCount(srcStr);
                        if (byteCount <= len)
                        {
                            result = srcStr;
                        }
                        else
                        {
                            int num = 0;
                            int num2 = 0;
                            char[] array = srcStr.ToCharArray();
                            char[] array2 = array;
                            for (int i = 0; i < array2.Length; i++)
                            {
                                char c = array2[i];
                                int byteCount2 = System.Text.Encoding.Default.GetByteCount(array, num2, 1);
                                int num3 = num + byteCount2;
                                if (num3 > len)
                                {
                                    result = srcStr.Substring(0, num2) + "...";
                                    return result;
                                }
                                num = num3;
                                num2++;
                            }
                            result = srcStr;
                        }
                    }
                }
                return result;
            }
            public static string ReplaceIDS(string oldIds, bool isNoZero = true)
            {
                string result;
                if (string.IsNullOrWhiteSpace(oldIds))
                {
                    result = "";
                }
                else
                {
                    string[] array = oldIds.Trim().Trim(new char[]
                    {
                        ','
                    }).Split(new char[]
                    {
                        ','
                    });
                    System.Collections.Generic.List<long> list = new System.Collections.Generic.List<long>();
                    string[] array2 = array;
                    for (int i = 0; i < array2.Length; i++)
                    {
                        string text = array2[i];
                        long num = TypeHelper.StrToInt64(text.Trim(), 0L);
                        if (!isNoZero || num != 0L)
                        {
                            if (!list.Contains(num))
                            {
                                list.Add(num);
                            }
                        }
                    }
                    string text2 = "";
                    foreach (long current in list)
                    {
                        text2 = text2 + "," + current.ToString();
                    }
                    result = text2.Trim(new char[]
                    {
                        ','
                    });
                }
                return result;
            }
            public static string ReplaceStr2(string sourceStr)
            {
                string result;
                if (string.IsNullOrWhiteSpace(sourceStr))
                {
                    result = sourceStr;
                }
                else
                {
                    result = sourceStr.Trim().Replace(" ", "").Replace("'", "").Replace("\"", "");
                }
                return result;
            }
            public static string Cut(string str, int len, System.Text.Encoding encoding)
            {
                string result;
                if (string.IsNullOrEmpty(str))
                {
                    result = str;
                }
                else
                {
                    if (len <= 0)
                    {
                        result = string.Empty;
                    }
                    else
                    {
                        int byteCount = encoding.GetByteCount(str);
                        if (byteCount > len)
                        {
                            bool flag = byteCount == str.Length;
                            if (flag)
                            {
                                result = str.Substring(0, len);
                                return result;
                            }
                            int num = 0;
                            int num2 = 0;
                            char[] array = str.ToCharArray();
                            char[] array2 = array;
                            for (int i = 0; i < array2.Length; i++)
                            {
                                char c = array2[i];
                                int byteCount2 = encoding.GetByteCount(array, num2, 1);
                                int num3 = num + byteCount2;
                                if (num3 > len)
                                {
                                    result = str.Substring(0, num2);
                                    return result;
                                }
                                num = num3;
                                num2++;
                            }
                        }
                        result = str;
                    }
                }
                return result;
            }
            public static int GetChineseLength(string s)
            {
                int result;
                if (string.IsNullOrEmpty(s))
                {
                    result = 0;
                }
                else
                {
                    result = System.Text.Encoding.GetEncoding("gb2312").GetByteCount(s);
                }
                return result;
            }
            public static int GetUTF8Length(string s)
            {
                int result;
                if (string.IsNullOrEmpty(s))
                {
                    result = 0;
                }
                else
                {
                    result = System.Text.Encoding.UTF8.GetByteCount(s);
                }
                return result;
            }
            public static string StrFormat(string str)
            {
                string result;
                if (str == null)
                {
                    result = "";
                }
                else
                {
                    str = str.Replace("\r\n", "<br />");
                    str = str.Replace("\n", "<br />");
                    result = str;
                }
                return result;
            }
            public static string EncodeHtml(string strHtml)
            {
                string result;
                if (strHtml != "")
                {
                    strHtml = strHtml.Replace(",", "&def");
                    strHtml = strHtml.Replace("'", "&dot");
                    strHtml = strHtml.Replace(";", "&dec");
                    result = strHtml;
                }
                else
                {
                    result = "";
                }
                return result;
            }
            public static string HtmlDecode(string str)
            {
                return HttpUtility.HtmlDecode(str);
            }
            public static string HtmlEncode(string str)
            {
                return HttpUtility.HtmlEncode(str);
            }
            public static string UrlEncode(string str)
            {
                return HttpUtility.UrlEncode(str);
            }
            public static string UrlDecode(string str)
            {
                return HttpUtility.UrlDecode(str);
            }
         
            public static bool StrIsNullOrEmpty(string str)
            {
                return str == null || str.Trim() == string.Empty;
            }
            public static string CutString(string str, int startIndex, int length)
            {
                string result;
                if (string.IsNullOrWhiteSpace(str))
                {
                    result = "";
                }
                else
                {
                    if (startIndex >= 0)
                    {
                        if (length < 0)
                        {
                            length *= -1;
                            if (startIndex - length < 0)
                            {
                                length = startIndex;
                                startIndex = 0;
                            }
                            else
                            {
                                startIndex -= length;
                            }
                        }
                        if (startIndex > str.Length)
                        {
                            result = "";
                            return result;
                        }
                    }
                    else
                    {
                        if (length < 0)
                        {
                            result = "";
                            return result;
                        }
                        if (length + startIndex <= 0)
                        {
                            result = "";
                            return result;
                        }
                        length += startIndex;
                        startIndex = 0;
                    }
                    if (str.Length - startIndex < length)
                    {
                        length = str.Length - startIndex;
                    }
                    result = str.Substring(startIndex, length);
                }
                return result;
            }
            public static string CutString(string str, int startIndex)
            {
                string result;
                if (string.IsNullOrWhiteSpace(str))
                {
                    result = "";
                }
                else
                {
                    result = StringHelper.CutString(str, startIndex, str.Length);
                }
                return result;
            }
           
            public static string ToSqlInStr(System.Collections.Generic.List<int> ids)
            {
                string text = "";
                if (ids != null && ids.Count > 0)
                {
                    foreach (int current in ids)
                    {
                        text = text + current + ",";
                    }
                }
                text = text.Trim(",".ToCharArray());
                return text;
            }
            public static string ToSqlInStr(System.Collections.Generic.List<long> ids)
            {
                string text = "";
                if (ids != null && ids.Count > 0)
                {
                    foreach (long current in ids)
                    {
                        text = text + current + ",";
                    }
                }
                text = text.Trim(",".ToCharArray());
                return text;
            }
            public static string ToSqlInStr(System.Collections.Generic.List<string> ids)
            {
                string text = "";
                if (ids != null && ids.Count > 0)
                {
                    foreach (string current in ids)
                    {
                        text = text + "'" + current + "',";
                    }
                }
                text = text.Trim(",".ToCharArray());
                return text;
            }
            public static string FilteSQLStr(string Str)
            {
                string result;
                if (string.IsNullOrEmpty(Str))
                {
                    result = "";
                }
                else
                {
                    Str = Str.Replace("'", "");
                    Str = Str.Replace("\"", "");
                    Str = Str.Replace("&", "&amp");
                    Str = Str.Replace("<", "&lt");
                    Str = Str.Replace(">", "&gt");
                    Str = Str.Replace("delete", "");
                    Str = Str.Replace("update", "");
                    Str = Str.Replace("insert", "");
                    result = Str;
                }
                return result;
            }
    
    
    
    
            private static bool IsJsonStart(ref string json)
            {
                if (!string.IsNullOrEmpty(json))
                {
                    json = json.Trim('\r', '\n', ' ');
                    if (json.Length > 1)
                    {
                        char s = json[0];
                        char e = json[json.Length - 1];
                        return (s == '{' && e == '}') || (s == '[' && e == ']');
                    }
                }
                return false;
            }
            internal static bool IsJson(string json)
            {
                int errIndex;
                return IsJson(json, out errIndex);
            }
            internal static bool IsJson(string json, out int errIndex)
            {
                errIndex = 0;
                if (IsJsonStart(ref json))
                {
                    CharState cs = new CharState();
                    char c;
                    for (int i = 0; i < json.Length; i++)
                    {
                        c = json[i];
                        if (SetCharState(c, ref cs) && cs.childrenStart)//设置关键符号状态。
                        {
                            string item = json.Substring(i);
                            int err;
                            int length = GetValueLength(item, true, out err);
                            cs.childrenStart = false;
                            if (err > 0)
                            {
                                errIndex = i + err;
                                return false;
                            }
                            i = i + length - 1;
                        }
                        if (cs.isError)
                        {
                            errIndex = i;
                            return false;
                        }
                    }
    
                    return !cs.arrayStart && !cs.jsonStart;
                }
                return false;
            }
    
            /// <summary>
            /// 获取值的长度(当Json值嵌套以"{"或"["开头时)
            /// </summary>
            private static int GetValueLength(string json, bool breakOnErr, out int errIndex)
            {
                errIndex = 0;
                int len = 0;
                if (!string.IsNullOrEmpty(json))
                {
                    CharState cs = new CharState();
                    char c;
                    for (int i = 0; i < json.Length; i++)
                    {
                        c = json[i];
                        if (!SetCharState(c, ref cs))//设置关键符号状态。
                        {
                            if (!cs.jsonStart && !cs.arrayStart)//json结束,又不是数组,则退出。
                            {
                                break;
                            }
                        }
                        else if (cs.childrenStart)//正常字符,值状态下。
                        {
                            int length = GetValueLength(json.Substring(i), breakOnErr, out errIndex);//递归子值,返回一个长度。。。
                            cs.childrenStart = false;
                            cs.valueStart = 0;
                            //cs.state = 0;
                            i = i + length - 1;
                        }
                        if (breakOnErr && cs.isError)
                        {
                            errIndex = i;
                            return i;
                        }
                        if (!cs.jsonStart && !cs.arrayStart)//记录当前结束位置。
                        {
                            len = i + 1;//长度比索引+1
                            break;
                        }
                    }
                }
                return len;
            }
            /// <summary>
            /// 字符状态
            /// </summary>
            private class CharState
            {
                internal bool jsonStart = false;//以 "{"开始了...
                internal bool setDicValue = false;// 可以设置字典值了。
                internal bool escapeChar = false;//以"\"转义符号开始了
                /// <summary>
                /// 数组开始【仅第一开头才算】,值嵌套的以【childrenStart】来标识。
                /// </summary>
                internal bool arrayStart = false;//以"[" 符号开始了
                internal bool childrenStart = false;//子级嵌套开始了。
                /// <summary>
                /// 【0 初始状态,或 遇到“,”逗号】;【1 遇到“:”冒号】
                /// </summary>
                internal int state = 0;
    
                /// <summary>
                /// 【-1 取值结束】【0 未开始】【1 无引号开始】【2 单引号开始】【3 双引号开始】
                /// </summary>
                internal int keyStart = 0;
                /// <summary>
                /// 【-1 取值结束】【0 未开始】【1 无引号开始】【2 单引号开始】【3 双引号开始】
                /// </summary>
                internal int valueStart = 0;
                internal bool isError = false;//是否语法错误。
    
                internal void CheckIsError(char c)//只当成一级处理(因为GetLength会递归到每一个子项处理)
                {
                    if (keyStart > 1 || valueStart > 1)
                    {
                        return;
                    }
                    //示例 ["aa",{"bbbb":123,"fff","ddd"}] 
                    switch (c)
                    {
                        case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
                            isError = jsonStart && state == 0;//重复开始错误 同时不是值处理。
                            break;
                        case '}':
                            isError = !jsonStart || (keyStart != 0 && state == 0);//重复结束错误 或者 提前结束{"aa"}。正常的有{}
                            break;
                        case '[':
                            isError = arrayStart && state == 0;//重复开始错误
                            break;
                        case ']':
                            isError = !arrayStart || jsonStart;//重复开始错误 或者 Json 未结束
                            break;
                        case '"':
                        case '\'':
                            isError = !(jsonStart || arrayStart); //json 或数组开始。
                            if (!isError)
                            {
                                //重复开始 [""",{"" "}]
                                isError = (state == 0 && keyStart == -1) || (state == 1 && valueStart == -1);
                            }
                            if (!isError && arrayStart && !jsonStart && c == '\'')//['aa',{}]
                            {
                                isError = true;
                            }
                            break;
                        case ':':
                            isError = !jsonStart || state == 1;//重复出现。
                            break;
                        case ',':
                            isError = !(jsonStart || arrayStart); //json 或数组开始。
                            if (!isError)
                            {
                                if (jsonStart)
                                {
                                    isError = state == 0 || (state == 1 && valueStart > 1);//重复出现。
                                }
                                else if (arrayStart)//["aa,] [,]  [{},{}]
                                {
                                    isError = keyStart == 0 && !setDicValue;
                                }
                            }
                            break;
                        case ' ':
                        case '\r':
                        case '\n'://[ "a",\r\n{} ]
                        case '\0':
                        case '\t':
                            break;
                        default: //值开头。。
                            isError = (!jsonStart && !arrayStart) || (state == 0 && keyStart == -1) || (valueStart == -1 && state == 1);//
                            break;
                    }
                    //if (isError)
                    //{
    
                    //}
                }
            }
            /// <summary>
            /// 设置字符状态(返回true则为关键词,返回false则当为普通字符处理)
            /// </summary>
            private static bool SetCharState(char c, ref CharState cs)
            {
                cs.CheckIsError(c);
                switch (c)
                {
                    case '{'://[{ "[{A}]":[{"[{B}]":3,"m":"C"}]}]
                        #region 大括号
                        if (cs.keyStart <= 0 && cs.valueStart <= 0)
                        {
                            cs.keyStart = 0;
                            cs.valueStart = 0;
                            if (cs.jsonStart && cs.state == 1)
                            {
                                cs.childrenStart = true;
                            }
                            else
                            {
                                cs.state = 0;
                            }
                            cs.jsonStart = true;//开始。
                            return true;
                        }
                        #endregion
                        break;
                    case '}':
                        #region 大括号结束
                        if (cs.keyStart <= 0 && cs.valueStart < 2 && cs.jsonStart)
                        {
                            cs.jsonStart = false;//正常结束。
                            cs.state = 0;
                            cs.keyStart = 0;
                            cs.valueStart = 0;
                            cs.setDicValue = true;
                            return true;
                        }
                        // cs.isError = !cs.jsonStart && cs.state == 0;
                        #endregion
                        break;
                    case '[':
                        #region 中括号开始
                        if (!cs.jsonStart)
                        {
                            cs.arrayStart = true;
                            return true;
                        }
                        else if (cs.jsonStart && cs.state == 1)
                        {
                            cs.childrenStart = true;
                            return true;
                        }
                        #endregion
                        break;
                    case ']':
                        #region 中括号结束
                        if (cs.arrayStart && !cs.jsonStart && cs.keyStart <= 2 && cs.valueStart <= 0)//[{},333]//这样结束。
                        {
                            cs.keyStart = 0;
                            cs.valueStart = 0;
                            cs.arrayStart = false;
                            return true;
                        }
                        #endregion
                        break;
                    case '"':
                    case '\'':
                        #region 引号
                        if (cs.jsonStart || cs.arrayStart)
                        {
                            if (cs.state == 0)//key阶段,有可能是数组["aa",{}]
                            {
                                if (cs.keyStart <= 0)
                                {
                                    cs.keyStart = (c == '"' ? 3 : 2);
                                    return true;
                                }
                                else if ((cs.keyStart == 2 && c == '\'') || (cs.keyStart == 3 && c == '"'))
                                {
                                    if (!cs.escapeChar)
                                    {
                                        cs.keyStart = -1;
                                        return true;
                                    }
                                    else
                                    {
                                        cs.escapeChar = false;
                                    }
                                }
                            }
                            else if (cs.state == 1 && cs.jsonStart)//值阶段必须是Json开始了。
                            {
                                if (cs.valueStart <= 0)
                                {
                                    cs.valueStart = (c == '"' ? 3 : 2);
                                    return true;
                                }
                                else if ((cs.valueStart == 2 && c == '\'') || (cs.valueStart == 3 && c == '"'))
                                {
                                    if (!cs.escapeChar)
                                    {
                                        cs.valueStart = -1;
                                        return true;
                                    }
                                    else
                                    {
                                        cs.escapeChar = false;
                                    }
                                }
    
                            }
                        }
                        #endregion
                        break;
                    case ':':
                        #region 冒号
                        if (cs.jsonStart && cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 0)
                        {
                            if (cs.keyStart == 1)
                            {
                                cs.keyStart = -1;
                            }
                            cs.state = 1;
                            return true;
                        }
                        // cs.isError = !cs.jsonStart || (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1);
                        #endregion
                        break;
                    case ',':
                        #region 逗号 //["aa",{aa:12,}]
    
                        if (cs.jsonStart)
                        {
                            if (cs.keyStart < 2 && cs.valueStart < 2 && cs.state == 1)
                            {
                                cs.state = 0;
                                cs.keyStart = 0;
                                cs.valueStart = 0;
                                //if (cs.valueStart == 1)
                                //{
                                //    cs.valueStart = 0;
                                //}
                                cs.setDicValue = true;
                                return true;
                            }
                        }
                        else if (cs.arrayStart && cs.keyStart <= 2)
                        {
                            cs.keyStart = 0;
                            //if (cs.keyStart == 1)
                            //{
                            //    cs.keyStart = -1;
                            //}
                            return true;
                        }
                        #endregion
                        break;
                    case ' ':
                    case '\r':
                    case '\n'://[ "a",\r\n{} ]
                    case '\0':
                    case '\t':
                        if (cs.keyStart <= 0 && cs.valueStart <= 0) //cs.jsonStart && 
                        {
                            return true;//跳过空格。
                        }
                        break;
                    default: //值开头。。
                        if (c == '\\') //转义符号
                        {
                            if (cs.escapeChar)
                            {
                                cs.escapeChar = false;
                            }
                            else
                            {
                                cs.escapeChar = true;
                                return true;
                            }
                        }
                        else
                        {
                            cs.escapeChar = false;
                        }
                        if (cs.jsonStart || cs.arrayStart) // Json 或数组开始了。
                        {
                            if (cs.keyStart <= 0 && cs.state == 0)
                            {
                                cs.keyStart = 1;//无引号的
                            }
                            else if (cs.valueStart <= 0 && cs.state == 1 && cs.jsonStart)//只有Json开始才有值。
                            {
                                cs.valueStart = 1;//无引号的
                            }
                        }
                        break;
                }
                return false;
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:WebApi的调用-2.后台调用

          本文链接:https://www.haomeiwen.com/subject/cvlxextx.html