mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-10-27 08:27:19 +00:00
Added LibraryHelpers.CreateHttpClientMessageHandle to standardize HttpMessageHandler creation Added REST client option for selecting HTTP protocol version Added REST client option for HTTP client keep alive interval Added HttpVersion to WebCallResult responses Updated request logic to default to using HTTP version 2.0 for dotnet core
93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net.Http;
|
|
using System.Net.Http.Headers;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using CryptoExchange.Net.Interfaces;
|
|
|
|
namespace CryptoExchange.Net.Requests
|
|
{
|
|
/// <summary>
|
|
/// Request object, wrapper for HttpRequestMessage
|
|
/// </summary>
|
|
public class Request : IRequest
|
|
{
|
|
private readonly HttpRequestMessage _request;
|
|
private readonly HttpClient _httpClient;
|
|
|
|
/// <summary>
|
|
/// Create request object for web request
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <param name="client"></param>
|
|
/// <param name="requestId"></param>
|
|
public Request(HttpRequestMessage request, HttpClient client, int requestId)
|
|
{
|
|
_httpClient = client;
|
|
_request = request;
|
|
RequestId = requestId;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public string? Content { get; private set; }
|
|
|
|
/// <inheritdoc />
|
|
public string Accept
|
|
{
|
|
set => _request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(value));
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public HttpMethod Method
|
|
{
|
|
get => _request.Method;
|
|
set => _request.Method = value;
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public Uri Uri => _request.RequestUri!;
|
|
|
|
/// <inheritdoc />
|
|
public Version HttpVersion => _request.Version!;
|
|
|
|
/// <inheritdoc />
|
|
public int RequestId { get; }
|
|
|
|
/// <inheritdoc />
|
|
public void SetContent(string data, string contentType)
|
|
{
|
|
Content = data;
|
|
_request.Content = new StringContent(data, Encoding.UTF8, contentType);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void AddHeader(string key, string value)
|
|
{
|
|
_request.Headers.Add(key, value);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public KeyValuePair<string, string[]>[] GetHeaders()
|
|
{
|
|
return _request.Headers.Select(h => new KeyValuePair<string, string[]>(h.Key, h.Value.ToArray())).ToArray();
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public void SetContent(byte[] data)
|
|
{
|
|
_request.Content = new ByteArrayContent(data);
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
public async Task<IResponse> GetResponseAsync(CancellationToken cancellationToken)
|
|
{
|
|
var response = await _httpClient.SendAsync(_request, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
|
|
|
|
return new Response(response);
|
|
}
|
|
}
|
|
}
|