Пример #1
0
        public void SendRequest(RestRequest request, RequestBack callBack)
        {
            Action<string> errAction = (e1) =>
            {
                if (null != callBack)
                {
                    DoubanSdkErrCode sdkErr = DoubanSdkErrCode.XPARAM_ERR;
                    callBack(new DoubanSdkResponse
                    {
                        //requestID = null != data ? data.requestId : "",
                        errCode = sdkErr,
                        specificCode = "",
                        content = e1,
                        stream = null
                    });
                }
            };

            if (null == request)
            {
                errAction("request should`t be null.");
                return;
            }

            m_Client.Authority = ConstDefine.PublicApiUrl;
            m_Client.HasElevatedPermissions = true;

            //添加鉴权
            request.DecompressionMethods = DecompressionMethods.GZip;
            request.Encoding = Encoding.UTF8;

            IWebCredentials credentials = null;

            if (null != DoubanAPI.DoubanInfo.tokenInfo && !string.IsNullOrEmpty(DoubanAPI.DoubanInfo.tokenInfo.access_token))
            {
                request.AddHeader("Authorization", string.Format("Bearer {0}", DoubanAPI.DoubanInfo.tokenInfo.access_token));
            }
            else
            {
                request.AddParameter("source", DoubanSdkData.AppKey);
            }
            request.AddParameter("curtime", DateTime.Now.ToString());
            request.Credentials = credentials;

            m_Client.BeginRequest(request, (e1, e2, e3) => AsyncCallback(e1, e2, callBack));
        }
Пример #2
0
        private void AsyncCallback(RestRequest request, RestResponse response, RequestBack callBack)
        {
            DoubanSdkResponse sdkRes = new DoubanSdkResponse();
            try
            {
                if (true == response.TimedOut)
                {
                    sdkRes.errCode = DoubanSdkErrCode.TIMEOUT;
                    sdkRes.content = "连接超时";

                }

                //网络异常(WebException)
                else if (null != response.InnerException || HttpStatusCode.OK != response.StatusCode)
                {
                    bool isUserCanceled = false;
                    if (response.InnerException is WebException)
                    {
                        WebException ex = response.InnerException as WebException;
                        if (WebExceptionStatus.RequestCanceled == ex.Status)
                        {
                            sdkRes.errCode = DoubanSdkErrCode.USER_CANCEL;
                            sdkRes.content = "Web Request is cancled.";
                            isUserCanceled = true;

                        }
                    }

                    if (!isUserCanceled)
                    {
                        try
                        {
                            DoubanErrorRes resObject = null;
                            //if (state.dataType == DataType.XML)
                            if (request.Path.Contains(".xml") || request.Path.Contains(".XML"))
                            {
                                XElement xmlSina = XElement.Parse(response.Content);
                                if (null != xmlSina.Element("error_code"))
                                {
                                    //得到服务器标准错误信息
                                    XmlSerializer serializer = new XmlSerializer(typeof(DoubanErrorRes));
                                    resObject = serializer.Deserialize(response.ContentStream) as DoubanErrorRes;
                                }
                            }
                            else
                            {
                                DataContractJsonSerializer ser = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(DoubanErrorRes));
                                resObject = ser.ReadObject(response.ContentStream) as DoubanErrorRes;

                            }

                            if (null != resObject && resObject is DoubanErrorRes)
                            {
                                sdkRes.errCode = DoubanSdkErrCode.SERVER_ERR;
                                sdkRes.specificCode = resObject.code;
                                sdkRes.content = resObject.msg;
                            }
                            else
                                throw new Exception();
                        }
                        catch//如果没有error_code这个节点...
                        {
                            //不是xml
                            //网络异常时统一错误:NET_UNUSUAL
                            if (response.StatusCode == HttpStatusCode.NotFound)
                            {
                                sdkRes.errCode = DoubanSdkErrCode.NET_UNUSUAL;
                                sdkRes.content = "网络状况异常";
                            }
                            else
                            {
                                sdkRes.errCode = DoubanSdkErrCode.SERVER_ERR;
                                sdkRes.specificCode = response.StatusCode.ToString();
                                sdkRes.content = response.Content;
                            }
                        }
                    }

                }
                // 正常情况
                else
                {
                    sdkRes.errCode = DoubanSdkErrCode.SUCCESS;
                    sdkRes.content = response.Content;
                    sdkRes.stream = response.ContentStream;
                }
            }
            catch (Exception e)
            {
                sdkRes.errCode = DoubanSdkErrCode.SERVER_ERR;
                sdkRes.content = "服务器返回信息异常";
            }
            if (null != callBack)
                callBack(sdkRes);
        }