/// <summary>
        /// 请求API,返回API结果
        /// </summary>
        /// <param name="client"></param>
        /// <param name="url"></param>
        /// <returns></returns>
        protected override async Task <Tuple <byte[], HttpStatusCode> > GetResult(IClientSetup setup, string url)
        {
            using (var content = this.GetContent())
                using (var hc = this.GetHttpClient(setup)) {
                    //设置超时
                    hc.Timeout = TimeSpan.FromSeconds(setup.Timeout);
                    var request = new HttpRequestMessage(this.HttpMethod, url);

                    //根据API方法的 ContentType 获取指定的格式化器的处理程序
                    var handler = ContentHandlers[this.ContentType];

                    //对 httpClient 进行处理,比如添加 Accept Header 等
                    handler.SetRequestHttpClient(hc);

                    //如果是 Post/ Put , 将 SendData 写入 request
                    if (content != null)
                    {
                        request.Content = content;
                    }

                    //发送请求
                    var rep = await hc.SendAsync(request);

                    //获取请求返回的数据
                    var bytes = await rep.Content.ReadAsByteArrayAsync();

                    return(new Tuple <byte[], HttpStatusCode>(bytes, rep.StatusCode));
                }
        }
Beispiel #2
0
        /// <summary>
        /// 获取请求地址
        /// </summary>
        /// <param name="option"></param>
        /// <param name="setup"></param>
        /// <returns></returns>
        protected string GetUrl(ApiClientOption option, IClientSetup setup)
        {
            var url = setup.GetUrl(this, option.UseSandbox);

            //TODO
            return(url.SetUrlKeyValue(this.GetParams().ToDictionary(d => d.Key, d => d.Value.ToString())));
        }
 public T Parse <T>(IClientSetup client, byte[] bytes)
 {
     using (var msm = new MemoryStream(bytes)) {
         //return ProtoBuf.Serializer.DeserializeWithLengthPrefix<T>(msm, ProtoBuf.PrefixStyle.None);
         return(ProtoBuf.Serializer.Deserialize <T>(msm));
     }
 }
Beispiel #4
0
        protected override async Task <Token> Parse(IClientSetup setup, byte[] result)
        {
            var token = await base.Parse(setup, result);

            await((Setup)setup).UpdateToken(token);
            return(token);
        }
Beispiel #5
0
        protected override Task <object> Parse(IClientSetup setup, byte[] result)
        {
            //return base.Parse(setup, result);

            var str  = Encoding.UTF8.GetString(result, 0, result.Length);
            var json = Regex.Match(str, @"^_&&_\((?<json>[\s\S]*?)\)$").Groups["json"].Value;

            if (string.IsNullOrWhiteSpace(json))
            {
                return(null);
            }
            else
            {
                var bs = Encoding.UTF8.GetBytes(json);
                return(base.Parse(setup, bs));
            }
        }
Beispiel #6
0
 /// <summary>
 /// 获取执行结果的字符串
 /// </summary>
 /// <param name="setup"></param>
 /// <param name="moduleUrl"></param>
 /// <returns></returns>
 protected abstract Task <Tuple <byte[], HttpStatusCode> > GetResult(IClientSetup setup, string moduleUrl);
Beispiel #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="setup"></param>
        /// <returns></returns>
        protected override HttpClient GetHttpClient(IClientSetup setup)
        {
            var token = ((Setup)setup).GetToken();

            return(new BearerHttpClient(token));
        }
Beispiel #8
0
 public void Setup(IClientSetup setup) {
     
 }
Beispiel #9
0
 public ClientSetupException(IClientSetup setup)
     : base(string.Format("{0} 配置错误", setup.GetType().FullName))
 {
     this.Setup = setup;
 }
 /// <summary>
 /// 获取操作过的 HttpClient ,如添加 Header 等
 /// </summary>
 /// <param name="setup"></param>
 /// <returns></returns>
 protected virtual HttpClient GetHttpClient(IClientSetup setup)
 {
     return(new HttpClient());
 }
        /// <summary>
        /// 解析API返回结果
        /// </summary>
        /// <param name="setup"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        protected override Task <T> Parse(IClientSetup setup, byte[] result)
        {
            var handler = ContentHandlers[this.ContentType];

            return(Task.FromResult(handler.Parse <T>(setup, result)));
        }
Beispiel #12
0
 public void Setup(IClientSetup setup)
 {
     this.Options = setup;
 }
Beispiel #13
0
        public T Parse <T>(IClientSetup client, byte[] bytes)
        {
            var json = Encoding.UTF8.GetString(bytes, 0, bytes.Length);

            return(JsonConvert.DeserializeObject <T>(json));
        }