/// <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)); } }
/// <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)); } }
protected override async Task <Token> Parse(IClientSetup setup, byte[] result) { var token = await base.Parse(setup, result); await((Setup)setup).UpdateToken(token); return(token); }
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)); } }
/// <summary> /// 获取执行结果的字符串 /// </summary> /// <param name="setup"></param> /// <param name="moduleUrl"></param> /// <returns></returns> protected abstract Task <Tuple <byte[], HttpStatusCode> > GetResult(IClientSetup setup, string moduleUrl);
/// <summary> /// /// </summary> /// <param name="setup"></param> /// <returns></returns> protected override HttpClient GetHttpClient(IClientSetup setup) { var token = ((Setup)setup).GetToken(); return(new BearerHttpClient(token)); }
public void Setup(IClientSetup setup) { }
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))); }
public void Setup(IClientSetup setup) { this.Options = setup; }
public T Parse <T>(IClientSetup client, byte[] bytes) { var json = Encoding.UTF8.GetString(bytes, 0, bytes.Length); return(JsonConvert.DeserializeObject <T>(json)); }