diff --git a/CryptoExchange.Net/Clients/BaseRestClient.cs b/CryptoExchange.Net/Clients/BaseRestClient.cs
index cb2b58f..e112bea 100644
--- a/CryptoExchange.Net/Clients/BaseRestClient.cs
+++ b/CryptoExchange.Net/Clients/BaseRestClient.cs
@@ -107,6 +107,7 @@ namespace CryptoExchange.Net
/// Credits used for the request
/// The JsonSerializer to use for deserialization
/// Additional headers to send with the request
+ /// Ignore rate limits for this request
///
[return: NotNull]
protected virtual async Task> SendRequestAsync(
@@ -120,7 +121,8 @@ namespace CryptoExchange.Net
ArrayParametersSerialization? arraySerialization = null,
int requestWeight = 1,
JsonSerializer? deserializer = null,
- Dictionary? additionalHeaders = null
+ Dictionary? additionalHeaders = null,
+ bool ignoreRatelimit = false
) where T : class
{
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(limitResult.Error!);
+ }
+ }
+
log.Write(LogLevel.Debug, $"[{requestId}] Creating request for " + uri);
if (signed && apiClient.AuthenticationProvider == null)
{
@@ -144,13 +156,7 @@ namespace CryptoExchange.Net
var paramsPosition = parameterPosition ?? ParameterPositions[method];
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(limitResult.Error!);
- }
-
+
string? paramString = "";
if (paramsPosition == HttpMethodParameterPosition.InBody)
paramString = $" with request body '{request.Content}'";
@@ -296,6 +302,14 @@ namespace CryptoExchange.Net
Dictionary? additionalHeaders)
{
parameters ??= new Dictionary();
+
+ for (var i = 0; i< parameters.Count; i++)
+ {
+ var kvp = parameters.ElementAt(i);
+ if (kvp.Value is Func