Пример #1
0
        /// <summary>
        /// 服务接口请求
        /// </summary>
        /// <typeparam name="RequestT"></typeparam>
        /// <typeparam name="ResponseT"></typeparam>
        /// <param name="apiName"></param>
        /// <param name="data"></param>
        /// <param name="responseTIsEntity">返回的ResponseT是实体</param>
        /// <returns></returns>
        public static ResultMsg <Result> RequestServer <RequestT>(String apiPath, RequestT data)
        {
            ResultMsg <Result> resultMsg = new ResultMsg <Result>();

            ResultMsg <String> result = null;

            if (data is HttpReqEntity)
            {
                var    tmp = data as HttpReqEntity;
                String url = apiPath;
                result = HttpHelper.Http(url, tmp);
            }
            else
            {
                String strData = String.Empty;
                if (null != data)
                {
                    strData = JsonFormatter.Serialize(data);
                }
                result = RequestServer(apiPath, HttpMethod.POST, strData);
            }

            if (result.Status == ResultStatus.Success)
            {
                if (!String.IsNullOrEmpty(result.ResultObj))
                {
                    Result tmp = JsonFormatter.Deserialize <Result>(result.ResultObj);
                    if (tmp == null)
                    {
                        resultMsg.SetFailure("数据请求错误,返回对象为空!");
                    }
                    else
                    {
                        resultMsg.ResultObj = tmp;
                        resultMsg.Msg       = result.ResultObj;
                    }
                }
                else
                {
                    resultMsg.SetFailure("数据请求错误,返回对象为空!");
                }
            }
            else
            {
                resultMsg.SetFailure(result.Msg);
            }

            return(resultMsg);
        }
Пример #2
0
        /// <summary>
        /// 用户登录(同时返回AccessToken)
        /// </summary>
        /// <param name="submitData">登录参数对象</param>
        /// <returns></returns>
        public ResultMsg <AccountLoginResultDTO> UserLogin(AccountLoginDTO submitData)
        {
            var result = new ResultMsg <AccountLoginResultDTO>();

            //难证
            if (submitData.Account.Trim() == "" || submitData.Password.Trim() == "")
            {
                return(result.SetFailure("请输入登录用户名和密码!"));
            }

            //1、先定义该API接口路径,可以从http://api.nlecloud.com页面的 帐号API接口 中的 用户登录得知
            String apiPath = String.Format("{0}/{1}", mApiHost, NLECloudAPIUrl.UserLoginUrl);

            //2、定义该API接口返回的对象,初始化为空
            result = RequestAPIHelper.RequestServer <AccountLoginDTO, AccountLoginResultDTO>(apiPath, submitData);

            if (result.IsSuccess())
            {
                this.mToken = result.ResultObj.AccessToken;
            }
            else
            {
                Console.WriteLine(result.Msg);
            }
            return(result);
        }
Пример #3
0
        /// <summary>
        /// 请求
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="data">请求数据</param>
        /// <param name="cookie">附加请求COOKIE</param>
        /// <param name="method">请求方式</param>
        /// <returns></returns>
        public static ResultMsg <string> Http(string url, string data, string cookie, HttpMethod method)
        {
            ResultMsg <string> result = new ResultMsg <string>();

            ResultMsg <HttpResEntity> resultMsg = Http(url, data, url, method, TIMEOUT);

            if (resultMsg.Status == ResultStatus.Success)
            {
                result.ResultObj = resultMsg.ResultObj.Bodys;
            }
            else
            {
                result.SetFailure(resultMsg.Msg);
            }

            return(result);
        }
Пример #4
0
        /// <summary>
        /// Get请求
        /// </summary>
        /// <param name="url">请求的地址</param>
        /// <param name="timeout">允许超时间,单位(秒)</param>
        /// <returns></returns>
        public static ResultMsg <string> Get(string url, int timeout)
        {
            ResultMsg <string> result = new ResultMsg <string>();

            ResultMsg <HttpResEntity> resultMsg = Http(url, null, null, HttpMethod.GET, TIMEOUT);

            if (resultMsg.Status == ResultStatus.Success)
            {
                result.ResultObj = resultMsg.ResultObj.Bodys;
            }
            else
            {
                result.SetFailure(resultMsg.Msg);
            }

            return(result);
        }
Пример #5
0
        /// <summary>
        /// 查询单个传感器
        /// </summary>
        /// <param name="deviceId">设备ID</param>
        /// <param name="apiTag">传感标识名</param>
        /// <param name="token"></param>
        /// <returns></returns>
        public ResultMsg <SensorBaseInfoDTO> GetSensorInfo(Int32 deviceId, String apiTag, String token = null)
        {
            var result = new ResultMsg <SensorBaseInfoDTO>();

            //验证
            var vry = PrimaryKeyVerify(deviceId, ref token);

            if (!vry.IsSuccess())
            {
                vry.CopyTo(result);
                return(result);
            }

            //1、先定义该API接口路径,可以从http://api.nlecloud.com/页面的得知
            String apiPath = String.Format("{0}/{1}", mApiHost, NLECloudAPIUrl.SensorOfDeviceUrl);

            //2、根据该API接口的请求参数中 得知需要创建个URI Parameters String类型参数,所以该参数直接跟在apiPath中
            apiPath = apiPath.Replace("{deviceid}", deviceId.ToString()).Replace("{apitag}", apiTag);//将API地址中的{projectid}替换成真实项目ID

            //3、由于调用该API需要Token,所以我们定义了一个通用的对象HttpReqEntity,在AccessToken当成头部请求信息提交过去
            HttpReqEntity req = new HttpReqEntity();

            req.Method = HttpMethod.GET;
            req.Headers.Add("AccessToken", token);

            //4、定义该API接口返回的对象
            result = RequestAPIHelper.RequestServer <HttpReqEntity, SensorBaseInfoDTO>(apiPath, req, (json) =>
            {
                var qry = new ResultMsg <SensorBaseInfoDTO>();
                if (String.IsNullOrEmpty(json))
                {
                    return(qry.SetFailure("数据请求错误,返回对象为空!"));
                }

                JObject jObject = JObject.Parse(json);
                if (jObject["ResultObj"].HasValues && jObject["ResultObj"].SelectToken("Groups") != null)
                {
                    switch (jObject["ResultObj"]["Groups"].ToString())
                    {
                    case "1":
                        {
                            var tmp       = JsonFormatter.Deserialize <ResultMsg <SensorInfoDTO> >(json);
                            qry.ResultObj = tmp.ResultObj;
                        }
                        break;

                    case "2":
                        {
                            var tmp       = JsonFormatter.Deserialize <ResultMsg <ActuatorInfoDTO> >(json);
                            qry.ResultObj = tmp.ResultObj;
                        }
                        break;

                    case "3":
                        {
                            var tmp       = JsonFormatter.Deserialize <ResultMsg <CameraInfoDTO> >(json);
                            qry.ResultObj = tmp.ResultObj;
                        }
                        break;
                    }
                    return(qry);
                }
                else
                {
                    return(qry.SetFailure("数据请求错误,返回对象为空!"));
                }
            });

            if (result.IsSuccess() && result.ResultObj != null)
            {
                result.ResultObj.Value = ValueConvertToByteAry(result.ResultObj.Value);
            }

            return(result);
        }
Пример #6
0
        /// <summary>
        /// 请求
        /// </summary>
        /// <param name="data">POST时的数据</param>
        /// <param name="url">地址</param>
        /// <param name="timeout">超时时间秒</param>
        /// <returns>返回HttpResEntity</returns>
        private static ResultMsg <HttpResEntity> webRequest(string url, HttpReqEntity data, int timeout)
        {
            ResultMsg <HttpResEntity> ret      = new ResultMsg <HttpResEntity>();
            HttpWebRequest            request  = null;
            HttpWebResponse           response = null;

            if (timeout <= 0)
            {
                timeout = TIMEOUT;
            }
            TimeoutTask timeoutTask = new TimeoutTask(
                delegate
            {
                try
                {
                    request             = (HttpWebRequest)WebRequest.Create(url);
                    request.ContentType = string.IsNullOrEmpty(data.ContentType) ? "application/json" : data.ContentType;
                    request.Method      = data.Method.ToString();


                    if (data.Headers != null && data.Headers.Count > 0)
                    {
                        request.Headers.Add(data.Headers);
                    }

                    Encoding encoding = data.Encoding == null ? Encoding.UTF8 : data.Encoding;
                    //if (data.Method != HttpMethod.GET)
                    {
                        if (!string.IsNullOrEmpty(data.Datas))
                        {
                            byte[] requestData    = encoding.GetBytes(data.Datas);
                            request.ContentLength = requestData.Length;
                            using (Stream newStream = request.GetRequestStream())
                            {
                                newStream.Write(requestData, 0, requestData.Length);
                            };
                        }
                        else
                        {
                            request.ContentLength = 0;
                        }
                    }

                    if (!string.IsNullOrEmpty(data.Cookies))
                    {
                        CookieContainer co = new CookieContainer();
                        string server      = GetHost(url, true);
                        co.SetCookies(new Uri("http://" + server), data.Cookies);
                        request.CookieContainer = co;
                    }

                    //Thread.Sleep(31000);
                    response = (HttpWebResponse)request.GetResponse();
                    HttpResEntity resEntity = new HttpResEntity();
                    using (StreamReader receiveStream = new StreamReader(response.GetResponseStream(), encoding))
                    {
                        resEntity.Bodys   = receiveStream.ReadToEnd();
                        resEntity.Cookies = response.Headers.Get("Set-Cookie");
                        resEntity.Headers = response.Headers;

                        ret.SetSuccess(resEntity);
                    };
                }
                catch (Exception ex)
                {
                    ret.SetFailure(String.Format("请求出错\r请求地址:{0}\r可能原因:{1}", url, ex.Message));
                }
                finally
                {
                    CloseRequest(request, response);
                }
            },
                delegate//超时后处理事件
            {
                CloseRequest(request, response);
                ret.SetFailure(string.Format("请求出错\r请求地址:{0}\r可能原因:{1}", url, "连接超时了,网络不通或服务端无响应"));
            });

            if (timeoutTask.Wait(timeout * 1000))//不超时
            {
                return(ret);
            }

            return(ret);
        }
Пример #7
0
        /// <summary>
        /// 服务接口请求
        /// </summary>
        /// <typeparam name="RequestT"></typeparam>
        /// <typeparam name="ResponseT"></typeparam>
        /// <param name="apiName"></param>
        /// <param name="data"></param>
        /// <param name="responseTIsEntity">指定的ResponseT是实体,不是ResultMsgT"></param>
        /// <returns></returns>
        public static ResultMsg <ResponseT> RequestServer <RequestT, ResponseT>(String apiPath, RequestT data, bool responseTIsEntity = true)
        {
            ResultMsg <ResponseT> resultMsg = new ResultMsg <ResponseT>();

            ResultMsg <String> result = null;

            if (data is HttpReqEntity)
            {
                var    tmp = data as HttpReqEntity;
                String url = apiPath;
                result = HttpHelper.Http(url, tmp);
            }
            else
            {
                String strData = String.Empty;
                if (null != data)
                {
                    strData = JsonFormatter.Serialize(data);
                }
                result = RequestServer(apiPath, HttpMethod.POST, strData);
            }

            if (result.Status == ResultStatus.Success)
            {
                if (!String.IsNullOrEmpty(result.ResultObj))
                {
                    //返回服务器原始对象
                    if (!responseTIsEntity)
                    {
                        ResponseT tmp = JsonFormatter.Deserialize <ResponseT>(result.ResultObj);
                        if (tmp == null)
                        {
                            resultMsg.SetFailure("数据请求错误,返回对象为空!");
                        }
                        else
                        {
                            ResultMsg <ResponseT> serverResult = tmp as ResultMsg <ResponseT>;
                            if (serverResult != null)
                            {
                                serverResult.CopyTo <ResponseT>(resultMsg);
                            }
                            else
                            {
                                resultMsg.SetFailure("解析JSON数据失败,返回对象不正确!");
                            }
                        }
                    }
                    else
                    {
                        ResultMsg <ResponseT> tmp = JsonFormatter.Deserialize <ResultMsg <ResponseT> >(result.ResultObj);
                        if (tmp == null)
                        {
                            resultMsg.SetFailure("数据请求错误,返回对象为空!");
                        }
                        else
                        {
                            resultMsg = tmp;
                            if (String.IsNullOrEmpty(resultMsg.Msg))
                            {
                                resultMsg.Msg = result.ResultObj;
                            }
                        }
                    }
                }
                else
                {
                    resultMsg.SetFailure("数据请求错误,返回对象为空!");
                }
            }
            else
            {
                resultMsg.SetFailure(result.Msg);
            }

            return(resultMsg);
        }
Пример #8
0
        /// <summary>
        /// 服务接口请求
        /// </summary>
        /// <typeparam name="RequestT"></typeparam>
        /// <typeparam name="ResponseT"></typeparam>
        /// <param name="apiPath"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static ResultMsg <ResponseT> RequestServer <RequestT, ResponseT>(String apiPath, RequestT data, Func <String, ResultMsg <ResponseT> > succCallback = null)
        {
            ResultMsg <ResponseT> resultMsg = new ResultMsg <ResponseT>();

            ResultMsg <String> result = null;

            if (data is HttpReqEntity)
            {
                var    tmp = data as HttpReqEntity;
                String url = apiPath;
                result = HttpHelper.Http(url, tmp);
            }
            else
            {
                String strData = String.Empty;
                if (null != data)
                {
                    strData = JsonFormatter.Serialize(data);
                }
                result = RequestServer(apiPath, HttpMethod.POST, strData);
            }

            if (result.Status == ResultStatus.Success)
            {
                if (succCallback != null)
                {
                    return(succCallback(result.ResultObj));
                }
                else
                {
                    if (!String.IsNullOrEmpty(result.ResultObj))
                    {
                        Type type = typeof(ResponseT);
                        if (type == ResultMsgT || type == ResultT)
                        {
                            ResponseT tmp = JsonFormatter.Deserialize <ResponseT>(result.ResultObj);
                            if (tmp == null)
                            {
                                resultMsg.SetFailure("数据请求错误,返回对象为空!");
                            }
                            else
                            {
                                resultMsg.ResultObj = tmp;
                            }
                        }
                        else
                        {
                            ResultMsg <ResponseT> tmp = JsonFormatter.Deserialize <ResultMsg <ResponseT> >(result.ResultObj);
                            if (tmp == null)
                            {
                                resultMsg.SetFailure("数据请求错误,返回对象为空!");
                            }
                            else
                            {
                                resultMsg = tmp;
                            }
                        }
                    }
                    else
                    {
                        resultMsg.SetFailure("数据请求错误,返回对象为空!");
                    }
                }
            }
            else
            {
                resultMsg.SetFailure(result.Msg);
            }

            return(resultMsg);
        }