mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-08 08:26:20 +00:00
Fixed rate limiting affecting time sync, added support for delegate parameters
This commit is contained in:
parent
52e79446f6
commit
416f94484d
@ -107,6 +107,7 @@ namespace CryptoExchange.Net
|
|||||||
/// <param name="requestWeight">Credits used for the request</param>
|
/// <param name="requestWeight">Credits used for the request</param>
|
||||||
/// <param name="deserializer">The JsonSerializer to use for deserialization</param>
|
/// <param name="deserializer">The JsonSerializer to use for deserialization</param>
|
||||||
/// <param name="additionalHeaders">Additional headers to send with the request</param>
|
/// <param name="additionalHeaders">Additional headers to send with the request</param>
|
||||||
|
/// <param name="ignoreRatelimit">Ignore rate limits for this request</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[return: NotNull]
|
[return: NotNull]
|
||||||
protected virtual async Task<WebCallResult<T>> SendRequestAsync<T>(
|
protected virtual async Task<WebCallResult<T>> SendRequestAsync<T>(
|
||||||
@ -120,7 +121,8 @@ namespace CryptoExchange.Net
|
|||||||
ArrayParametersSerialization? arraySerialization = null,
|
ArrayParametersSerialization? arraySerialization = null,
|
||||||
int requestWeight = 1,
|
int requestWeight = 1,
|
||||||
JsonSerializer? deserializer = null,
|
JsonSerializer? deserializer = null,
|
||||||
Dictionary<string, string>? additionalHeaders = null
|
Dictionary<string, string>? additionalHeaders = null,
|
||||||
|
bool ignoreRatelimit = false
|
||||||
) where T : class
|
) where T : class
|
||||||
{
|
{
|
||||||
var requestId = NextId();
|
var requestId = NextId();
|
||||||
@ -135,6 +137,16 @@ namespace CryptoExchange.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!ignoreRatelimit)
|
||||||
|
{
|
||||||
|
foreach (var limiter in apiClient.RateLimiters)
|
||||||
|
{
|
||||||
|
var limitResult = await limiter.LimitRequestAsync(log, uri.AbsolutePath, method, signed, apiClient.Options.ApiCredentials?.Key, apiClient.Options.RateLimitingBehaviour, requestWeight, cancellationToken).ConfigureAwait(false);
|
||||||
|
if (!limitResult.Success)
|
||||||
|
return new WebCallResult<T>(limitResult.Error!);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.Write(LogLevel.Debug, $"[{requestId}] Creating request for " + uri);
|
log.Write(LogLevel.Debug, $"[{requestId}] Creating request for " + uri);
|
||||||
if (signed && apiClient.AuthenticationProvider == null)
|
if (signed && apiClient.AuthenticationProvider == null)
|
||||||
{
|
{
|
||||||
@ -144,12 +156,6 @@ namespace CryptoExchange.Net
|
|||||||
|
|
||||||
var paramsPosition = parameterPosition ?? ParameterPositions[method];
|
var paramsPosition = parameterPosition ?? ParameterPositions[method];
|
||||||
var request = ConstructRequest(apiClient, uri, method, parameters, signed, paramsPosition, arraySerialization ?? this.arraySerialization, requestId, additionalHeaders);
|
var request = ConstructRequest(apiClient, uri, method, parameters, signed, paramsPosition, arraySerialization ?? this.arraySerialization, requestId, additionalHeaders);
|
||||||
foreach (var limiter in apiClient.RateLimiters)
|
|
||||||
{
|
|
||||||
var limitResult = await limiter.LimitRequestAsync(log, uri.AbsolutePath, method, signed, apiClient.Options.ApiCredentials?.Key, apiClient.Options.RateLimitingBehaviour, requestWeight, cancellationToken).ConfigureAwait(false);
|
|
||||||
if (!limitResult.Success)
|
|
||||||
return new WebCallResult<T>(limitResult.Error!);
|
|
||||||
}
|
|
||||||
|
|
||||||
string? paramString = "";
|
string? paramString = "";
|
||||||
if (paramsPosition == HttpMethodParameterPosition.InBody)
|
if (paramsPosition == HttpMethodParameterPosition.InBody)
|
||||||
@ -296,6 +302,14 @@ namespace CryptoExchange.Net
|
|||||||
Dictionary<string, string>? additionalHeaders)
|
Dictionary<string, string>? additionalHeaders)
|
||||||
{
|
{
|
||||||
parameters ??= new Dictionary<string, object>();
|
parameters ??= new Dictionary<string, object>();
|
||||||
|
|
||||||
|
for (var i = 0; i< parameters.Count; i++)
|
||||||
|
{
|
||||||
|
var kvp = parameters.ElementAt(i);
|
||||||
|
if (kvp.Value is Func<object> delegateValue)
|
||||||
|
parameters[kvp.Key] = delegateValue();
|
||||||
|
}
|
||||||
|
|
||||||
if (parameterPosition == HttpMethodParameterPosition.InUri)
|
if (parameterPosition == HttpMethodParameterPosition.InUri)
|
||||||
{
|
{
|
||||||
foreach (var parameter in parameters)
|
foreach (var parameter in parameters)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user