private void RequestAsync(string serviceName, string actionName, QCloudIMRequest request)
        {
            RestRequest restrequest;
            var         client = GetRestSharpClient(serviceName, actionName, request, out restrequest);

            var result = client.ExecuteTaskAsync <QCloudIMResult>(restrequest).Result;
        }
        private static T Request <T>(string serviceName, string actionName, QCloudIMRequest request) where T : QCloudIMResult, new()
        {
            RestRequest restrequest;
            var         client = GetRestSharpClient(serviceName, actionName, request, out restrequest);

            var response = client.Execute <T>(restrequest);


            //if (response.StatusCode != "OK")
            //{
            //    throw new YCException("Failed to request QCloud IM API " + actionName + ": " + response.ErrorInfo);
            //}

            return(JsonConvert.DeserializeObject <T>(response.Content));
        }
        private static RestClient GetRestSharpClient(string serviceName, string actionName, QCloudIMRequest request, out RestRequest restrequest)
        {
            request.AppId  = AppId;
            request.Random = Math.Abs(new Random().Next()).ToString();
            if (string.IsNullOrWhiteSpace(request.ReqIdentifier))
            {
                request.ReqIdentifier = GlobalRequestIdentifier;
            }
            try
            {
                string userSig = MakeUserSig(request.ReqIdentifier);
                request.UserSig = userSig;
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to generate signature for " + serviceName + " " + actionName + " " +
                                    request.ReqIdentifier, ex);
            }
            string     url    = MakeApiUrl(serviceName, actionName, request);
            RestClient client = new RestClient(baseUrl: ApiUrl);

            restrequest = new RestRequest(url, Method.POST);
            restrequest.AddHeader("Content-Type", "application/json"); //设置HTTP头

            var jSetting = new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            };
            string jsonToSend = JsonConvert.SerializeObject(request, Formatting.Indented, jSetting);

            restrequest.AddParameter("application/json; charset=utf-8", jsonToSend, "application/json;charset=UTF-8",
                                     ParameterType.RequestBody);
            restrequest.RequestFormat = DataFormat.Json;
            return(client);
        }
 /// <summary>
 /// 拼接restful的url参数
 /// </summary>
 /// <param name="serviceName"></param>
 /// <param name="actionName"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 private static string MakeApiUrl(string serviceName, string actionName, QCloudIMRequest request)
 {
     return(serviceName + "/" + actionName + "?usersig=" + request.UserSig + "&identifier=" +
            request.ReqIdentifier + "&sdkappid=" + request.AppId + "&random=" + request.Random + "&contenttype=json");
 }