/// <summary> /// 调用接口 /// </summary> /// <param name="outcoming">请求参数</param> /// <param name="stream">正常情况下返回的数据流, 内容是 CSV 格式的数据</param> /// <param name="incoming">出错时的返回结果</param> /// <returns>正常情况: true, 出错时: false</returns> public async Task <bool> Invoke(Outcoming outcoming, AsyncOutParameter <Stream> stream, AsyncOutParameter <Incoming> incoming) { var url = Stage.GetApiRootUrl(_sandbox) + "pay/downloadbill"; var response = await _requester.GetResponse(url, false, outcoming).ConfigureAwait(false); var netStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); var peekStream = new PeekableStream(netStream, 1); var buffer = new byte[1]; await peekStream.PeekAsync(buffer, 0, 1).ConfigureAwait(false); if (buffer[0] != '<') { stream.SetValue(peekStream); return(true); } using (var reader = new StreamReader(peekStream, Encoding.UTF8)) { var responseBody = await reader.ReadToEndAsync().ConfigureAwait(false); incoming.SetValue(_requester.ParseResponse <Incoming, ErrorCode>(responseBody, _checkSignature)); return(false); } }
private static async Task <string> FormatUrl(string url, ApiConfig config, AsyncOutParameter <string> token) { if (url.IndexOf("$acac$", StringComparison.InvariantCulture) < 0) { return(url); } var m = config?.AccessTokenManager ?? _defaultConfig.AccessTokenManager; var accessToken = await m.GetToken().ConfigureAwait(false); var escapedToken = Uri.EscapeDataString(accessToken); token.SetValue(accessToken); return(url.Replace("$acac$", "access_token=" + escapedToken)); }