Ejemplo n.º 1
0
        /// <summary>
        /// 异步获取响应字节集合。
        /// </summary>
        /// <param name="uri">给定的 <see cref="Uri"/>。</param>
        /// <param name="postData">给定要提交的数据(可选)。</param>
        /// <param name="enableCodec">启用字节编解码传输(可选)。</param>
        /// <param name="parameters">给定的自定义参数(可选)。</param>
        /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param>
        /// <returns>返回一个包含字节数组的异步操作。</returns>
        public virtual async Task <byte[]> GetResponseBytesAsync(Uri uri, string postData = null,
                                                                 bool enableCodec         = false, RequestParameters parameters = default, CancellationToken cancellationToken = default)
        {
            var stream = await GetResponseStreamAsync(uri, postData, enableCodec, parameters, cancellationToken).ConfigureAwait();

            if (stream.IsNotNull())
            {
                var bytes = Array.Empty <byte>();

                using (var ms = new MemoryStream())
                {
                    var buffer = new byte[64 * Options.BufferSize];

                    int length;
                    while ((length = stream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        ms.Write(buffer, 0, length);
                    }

                    bytes = ms.ToArray();
                }

                return(ByteCodec.Decode(bytes, enableCodec));
            }

            return(null);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 异步获取响应字节数组。
        /// </summary>
        /// <param name="uri">给定的 <see cref="Uri"/>。</param>
        /// <param name="postData">给定要提交的数据(可选)。</param>
        /// <param name="enableCodec">启用字节编解码传输(可选)。</param>
        /// <param name="parameters">给定的自定义参数(可选)。</param>
        /// <param name="cancellationToken">给定的 <see cref="CancellationToken"/>(可选)。</param>
        /// <returns>返回一个包含字节数组的异步操作。</returns>
        public override async Task <byte[]> GetResponseBytesAsync(Uri uri, string postData = null,
                                                                  bool enableCodec         = false, RequestParameters parameters = default, CancellationToken cancellationToken = default)
        {
            var message = await GetResponseMessage(uri, postData, enableCodec, parameters, cancellationToken).ConfigureAwait();

            var buffer = await message.Content.ReadAsByteArrayAsync().ConfigureAwait();

            if (buffer.IsNotEmpty())
            {
                return(ByteCodec.Decode(buffer, enableCodec));
            }

            return(buffer);
        }