mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-09 17:06:19 +00:00
Added postParameterPosition/arraySeralization settings to authentication provider interface, fixed array serialization for request body
This commit is contained in:
parent
5a33bd554e
commit
128cab8e1e
@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using CryptoExchange.Net.Objects;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
|
||||||
namespace CryptoExchange.Net.Authentication
|
namespace CryptoExchange.Net.Authentication
|
||||||
@ -29,8 +30,11 @@ namespace CryptoExchange.Net.Authentication
|
|||||||
/// <param name="method"></param>
|
/// <param name="method"></param>
|
||||||
/// <param name="parameters"></param>
|
/// <param name="parameters"></param>
|
||||||
/// <param name="signed"></param>
|
/// <param name="signed"></param>
|
||||||
|
/// <param name="postParameterPosition"></param>
|
||||||
|
/// <param name="arraySerialization"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public virtual Dictionary<string, object> AddAuthenticationToParameters(string uri, HttpMethod method, Dictionary<string, object> parameters, bool signed)
|
public virtual Dictionary<string, object> AddAuthenticationToParameters(string uri, HttpMethod method, Dictionary<string, object> parameters, bool signed,
|
||||||
|
PostParameters postParameterPosition, ArrayParametersSerialization arraySerialization)
|
||||||
{
|
{
|
||||||
return parameters;
|
return parameters;
|
||||||
}
|
}
|
||||||
@ -42,8 +46,11 @@ namespace CryptoExchange.Net.Authentication
|
|||||||
/// <param name="method"></param>
|
/// <param name="method"></param>
|
||||||
/// <param name="parameters"></param>
|
/// <param name="parameters"></param>
|
||||||
/// <param name="signed"></param>
|
/// <param name="signed"></param>
|
||||||
|
/// <param name="postParameterPosition"></param>
|
||||||
|
/// <param name="arraySerialization"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public virtual Dictionary<string, string> AddAuthenticationToHeaders(string uri, HttpMethod method, Dictionary<string, object> parameters, bool signed)
|
public virtual Dictionary<string, string> AddAuthenticationToHeaders(string uri, HttpMethod method, Dictionary<string, object> parameters, bool signed,
|
||||||
|
PostParameters postParameterPosition, ArrayParametersSerialization arraySerialization)
|
||||||
{
|
{
|
||||||
return new Dictionary<string, string>();
|
return new Dictionary<string, string>();
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="credentials"></param>
|
<param name="credentials"></param>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.Authentication.AuthenticationProvider.AddAuthenticationToParameters(System.String,System.Net.Http.HttpMethod,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean)">
|
<member name="M:CryptoExchange.Net.Authentication.AuthenticationProvider.AddAuthenticationToParameters(System.String,System.Net.Http.HttpMethod,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean,CryptoExchange.Net.Objects.PostParameters,CryptoExchange.Net.Objects.ArrayParametersSerialization)">
|
||||||
<summary>
|
<summary>
|
||||||
Add authentication to the parameter list
|
Add authentication to the parameter list
|
||||||
</summary>
|
</summary>
|
||||||
@ -105,9 +105,11 @@
|
|||||||
<param name="method"></param>
|
<param name="method"></param>
|
||||||
<param name="parameters"></param>
|
<param name="parameters"></param>
|
||||||
<param name="signed"></param>
|
<param name="signed"></param>
|
||||||
|
<param name="postParameterPosition"></param>
|
||||||
|
<param name="arraySerialization"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.Authentication.AuthenticationProvider.AddAuthenticationToHeaders(System.String,System.Net.Http.HttpMethod,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean)">
|
<member name="M:CryptoExchange.Net.Authentication.AuthenticationProvider.AddAuthenticationToHeaders(System.String,System.Net.Http.HttpMethod,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean,CryptoExchange.Net.Objects.PostParameters,CryptoExchange.Net.Objects.ArrayParametersSerialization)">
|
||||||
<summary>
|
<summary>
|
||||||
Add authentication to the header dictionary
|
Add authentication to the header dictionary
|
||||||
</summary>
|
</summary>
|
||||||
@ -115,6 +117,8 @@
|
|||||||
<param name="method"></param>
|
<param name="method"></param>
|
||||||
<param name="parameters"></param>
|
<param name="parameters"></param>
|
||||||
<param name="signed"></param>
|
<param name="signed"></param>
|
||||||
|
<param name="postParameterPosition"></param>
|
||||||
|
<param name="arraySerialization"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.Authentication.AuthenticationProvider.Sign(System.String)">
|
<member name="M:CryptoExchange.Net.Authentication.AuthenticationProvider.Sign(System.String)">
|
||||||
@ -2142,7 +2146,7 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns>The roundtrip time of the ping request</returns>
|
<returns>The roundtrip time of the ping request</returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.RestClient.SendRequest``1(System.Uri,System.Net.Http.HttpMethod,System.Threading.CancellationToken,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean,System.Boolean)">
|
<member name="M:CryptoExchange.Net.RestClient.SendRequest``1(System.Uri,System.Net.Http.HttpMethod,System.Threading.CancellationToken,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean,System.Boolean,System.Nullable{CryptoExchange.Net.Objects.PostParameters},System.Nullable{CryptoExchange.Net.Objects.ArrayParametersSerialization})">
|
||||||
<summary>
|
<summary>
|
||||||
Execute a request
|
Execute a request
|
||||||
</summary>
|
</summary>
|
||||||
@ -2153,6 +2157,8 @@
|
|||||||
<param name="parameters">The parameters of the request</param>
|
<param name="parameters">The parameters of the request</param>
|
||||||
<param name="signed">Whether or not the request should be authenticated</param>
|
<param name="signed">Whether or not the request should be authenticated</param>
|
||||||
<param name="checkResult">Whether or not the resulting object should be checked for missing properties in the mapping (only outputs if log verbosity is Debug)</param>
|
<param name="checkResult">Whether or not the resulting object should be checked for missing properties in the mapping (only outputs if log verbosity is Debug)</param>
|
||||||
|
<param name="postPosition">Where the post parameters should be placed</param>
|
||||||
|
<param name="arraySerialization">How array paramters should be serialized</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.RestClient.GetResponse``1(CryptoExchange.Net.Interfaces.IRequest,System.Threading.CancellationToken)">
|
<member name="M:CryptoExchange.Net.RestClient.GetResponse``1(CryptoExchange.Net.Interfaces.IRequest,System.Threading.CancellationToken)">
|
||||||
@ -2171,7 +2177,7 @@
|
|||||||
<param name="data">Received data</param>
|
<param name="data">Received data</param>
|
||||||
<returns>Null if not an error, Error otherwise</returns>
|
<returns>Null if not an error, Error otherwise</returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.RestClient.ConstructRequest(System.Uri,System.Net.Http.HttpMethod,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean)">
|
<member name="M:CryptoExchange.Net.RestClient.ConstructRequest(System.Uri,System.Net.Http.HttpMethod,System.Collections.Generic.Dictionary{System.String,System.Object},System.Boolean,CryptoExchange.Net.Objects.PostParameters,CryptoExchange.Net.Objects.ArrayParametersSerialization)">
|
||||||
<summary>
|
<summary>
|
||||||
Creates a request object
|
Creates a request object
|
||||||
</summary>
|
</summary>
|
||||||
@ -2179,6 +2185,8 @@
|
|||||||
<param name="method">The method of the request</param>
|
<param name="method">The method of the request</param>
|
||||||
<param name="parameters">The parameters of the request</param>
|
<param name="parameters">The parameters of the request</param>
|
||||||
<param name="signed">Whether or not the request should be authenticated</param>
|
<param name="signed">Whether or not the request should be authenticated</param>
|
||||||
|
<param name="postPosition">Where the post parameters should be placed</param>
|
||||||
|
<param name="arraySerialization">How array paramters should be serialized</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
<member name="M:CryptoExchange.Net.RestClient.WriteParamBody(CryptoExchange.Net.Interfaces.IRequest,System.Collections.Generic.Dictionary{System.String,System.Object},System.String)">
|
<member name="M:CryptoExchange.Net.RestClient.WriteParamBody(CryptoExchange.Net.Interfaces.IRequest,System.Collections.Generic.Dictionary{System.String,System.Object},System.String)">
|
||||||
@ -2909,148 +2917,5 @@
|
|||||||
<member name="M:CryptoExchange.Net.Sockets.WebsocketFactory.CreateWebsocket(CryptoExchange.Net.Logging.Log,System.String,System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String})">
|
<member name="M:CryptoExchange.Net.Sockets.WebsocketFactory.CreateWebsocket(CryptoExchange.Net.Logging.Log,System.String,System.Collections.Generic.IDictionary{System.String,System.String},System.Collections.Generic.IDictionary{System.String,System.String})">
|
||||||
<inheritdoc />
|
<inheritdoc />
|
||||||
</member>
|
</member>
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.AllowNullAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that <see langword="null"/> is allowed as an input even if the
|
|
||||||
corresponding type disallows it.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.AllowNullAttribute.#ctor">
|
|
||||||
<summary>
|
|
||||||
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.AllowNullAttribute"/> class.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.DisallowNullAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that <see langword="null"/> is disallowed as an input even if the
|
|
||||||
corresponding type allows it.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.DisallowNullAttribute.#ctor">
|
|
||||||
<summary>
|
|
||||||
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.DisallowNullAttribute"/> class.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that a method that will never return under any circumstance.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute.#ctor">
|
|
||||||
<summary>
|
|
||||||
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute"/> class.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that the method will not return if the associated <see cref="T:System.Boolean"/>
|
|
||||||
parameter is passed the specified value.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.ParameterValue">
|
|
||||||
<summary>
|
|
||||||
Gets the condition parameter value.
|
|
||||||
Code after the method is considered unreachable by diagnostics if the argument
|
|
||||||
to the associated parameter matches this value.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.#ctor(System.Boolean)">
|
|
||||||
<summary>
|
|
||||||
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute"/>
|
|
||||||
class with the specified parameter value.
|
|
||||||
</summary>
|
|
||||||
<param name="parameterValue">
|
|
||||||
The condition parameter value.
|
|
||||||
Code after the method is considered unreachable by diagnostics if the argument
|
|
||||||
to the associated parameter matches this value.
|
|
||||||
</param>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that an output may be <see langword="null"/> even if the
|
|
||||||
corresponding type disallows it.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.MaybeNullAttribute.#ctor">
|
|
||||||
<summary>
|
|
||||||
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.MaybeNullAttribute"/> class.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue"/>,
|
|
||||||
the parameter may be <see langword="null"/> even if the corresponding type disallows it.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue">
|
|
||||||
<summary>
|
|
||||||
Gets the return value condition.
|
|
||||||
If the method returns this value, the associated parameter may be <see langword="null"/>.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.#ctor(System.Boolean)">
|
|
||||||
<summary>
|
|
||||||
Initializes the attribute with the specified return value condition.
|
|
||||||
</summary>
|
|
||||||
<param name="returnValue">
|
|
||||||
The return value condition.
|
|
||||||
If the method returns this value, the associated parameter may be <see langword="null"/>.
|
|
||||||
</param>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.NotNullAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that an output is not <see langword="null"/> even if the
|
|
||||||
corresponding type allows it.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.NotNullAttribute.#ctor">
|
|
||||||
<summary>
|
|
||||||
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.NotNullAttribute"/> class.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that the output will be non-<see langword="null"/> if the
|
|
||||||
named parameter is non-<see langword="null"/>.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.ParameterName">
|
|
||||||
<summary>
|
|
||||||
Gets the associated parameter name.
|
|
||||||
The output will be non-<see langword="null"/> if the argument to the
|
|
||||||
parameter specified is non-<see langword="null"/>.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.#ctor(System.String)">
|
|
||||||
<summary>
|
|
||||||
Initializes the attribute with the associated parameter name.
|
|
||||||
</summary>
|
|
||||||
<param name="parameterName">
|
|
||||||
The associated parameter name.
|
|
||||||
The output will be non-<see langword="null"/> if the argument to the
|
|
||||||
parameter specified is non-<see langword="null"/>.
|
|
||||||
</param>
|
|
||||||
</member>
|
|
||||||
<member name="T:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute">
|
|
||||||
<summary>
|
|
||||||
Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue"/>,
|
|
||||||
the parameter will not be <see langword="null"/> even if the corresponding type allows it.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue">
|
|
||||||
<summary>
|
|
||||||
Gets the return value condition.
|
|
||||||
If the method returns this value, the associated parameter will not be <see langword="null"/>.
|
|
||||||
</summary>
|
|
||||||
</member>
|
|
||||||
<member name="M:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.#ctor(System.Boolean)">
|
|
||||||
<summary>
|
|
||||||
Initializes the attribute with the specified return value condition.
|
|
||||||
</summary>
|
|
||||||
<param name="returnValue">
|
|
||||||
The return value condition.
|
|
||||||
If the method returns this value, the associated parameter will not be <see langword="null"/>.
|
|
||||||
</param>
|
|
||||||
</member>
|
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -7,6 +7,7 @@ using System.Runtime.InteropServices;
|
|||||||
using System.Security;
|
using System.Security;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Web;
|
||||||
using CryptoExchange.Net.Logging;
|
using CryptoExchange.Net.Logging;
|
||||||
using CryptoExchange.Net.Objects;
|
using CryptoExchange.Net.Objects;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
@ -79,16 +80,16 @@ namespace CryptoExchange.Net
|
|||||||
foreach (var arrayEntry in arraysParameters)
|
foreach (var arrayEntry in arraysParameters)
|
||||||
{
|
{
|
||||||
if(serializationType == ArrayParametersSerialization.Array)
|
if(serializationType == ArrayParametersSerialization.Array)
|
||||||
uriString += $"{string.Join("&", ((object[])(urlEncodeValues ? WebUtility.UrlEncode(arrayEntry.Value.ToString()) : arrayEntry.Value)).Select(v => $"{arrayEntry.Key}[]={v}"))}&";
|
uriString += $"{string.Join("&", ((object[])(urlEncodeValues ? Uri.EscapeDataString(arrayEntry.Value.ToString()) : arrayEntry.Value)).Select(v => $"{arrayEntry.Key}[]={v}"))}&";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var array = (Array)arrayEntry.Value;
|
var array = (Array)arrayEntry.Value;
|
||||||
uriString += string.Join("&", array.OfType<object>().Select(a => $"{arrayEntry.Key}={WebUtility.UrlEncode(a.ToString())}"));
|
uriString += string.Join("&", array.OfType<object>().Select(a => $"{arrayEntry.Key}={Uri.EscapeDataString(a.ToString())}"));
|
||||||
uriString += "&";
|
uriString += "&";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uriString += $"{string.Join("&", parameters.Where(p => !p.Value.GetType().IsArray).Select(s => $"{s.Key}={(urlEncodeValues ? WebUtility.UrlEncode(s.Value.ToString()) : s.Value)}"))}";
|
uriString += $"{string.Join("&", parameters.Where(p => !p.Value.GetType().IsArray).Select(s => $"{s.Key}={(urlEncodeValues ? Uri.EscapeDataString(s.Value.ToString()) : s.Value)}"))}";
|
||||||
uriString = uriString.TrimEnd('&');
|
uriString = uriString.TrimEnd('&');
|
||||||
return uriString;
|
return uriString;
|
||||||
}
|
}
|
||||||
|
@ -218,6 +218,7 @@ namespace CryptoExchange.Net.OrderBook
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<CallResult<bool>> StartAsync()
|
public async Task<CallResult<bool>> StartAsync()
|
||||||
{
|
{
|
||||||
|
log.Write(LogVerbosity.Debug, $"{Id} order book {Symbol} starting");
|
||||||
Status = OrderBookStatus.Connecting;
|
Status = OrderBookStatus.Connecting;
|
||||||
_processTask = Task.Run(ProcessQueue);
|
_processTask = Task.Run(ProcessQueue);
|
||||||
|
|
||||||
@ -271,6 +272,7 @@ namespace CryptoExchange.Net.OrderBook
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task StopAsync()
|
public async Task StopAsync()
|
||||||
{
|
{
|
||||||
|
log.Write(LogVerbosity.Debug, $"{Id} order book {Symbol} stopping");
|
||||||
Status = OrderBookStatus.Disconnected;
|
Status = OrderBookStatus.Disconnected;
|
||||||
_queueEvent.Set();
|
_queueEvent.Set();
|
||||||
_processTask.Wait();
|
_processTask.Wait();
|
||||||
|
@ -165,10 +165,12 @@ namespace CryptoExchange.Net
|
|||||||
/// <param name="parameters">The parameters of the request</param>
|
/// <param name="parameters">The parameters of the request</param>
|
||||||
/// <param name="signed">Whether or not the request should be authenticated</param>
|
/// <param name="signed">Whether or not the request should be authenticated</param>
|
||||||
/// <param name="checkResult">Whether or not the resulting object should be checked for missing properties in the mapping (only outputs if log verbosity is Debug)</param>
|
/// <param name="checkResult">Whether or not the resulting object should be checked for missing properties in the mapping (only outputs if log verbosity is Debug)</param>
|
||||||
|
/// <param name="postPosition">Where the post parameters should be placed</param>
|
||||||
|
/// <param name="arraySerialization">How array paramters should be serialized</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[return: NotNull]
|
[return: NotNull]
|
||||||
protected virtual async Task<WebCallResult<T>> SendRequest<T>(Uri uri, HttpMethod method, CancellationToken cancellationToken,
|
protected virtual async Task<WebCallResult<T>> SendRequest<T>(Uri uri, HttpMethod method, CancellationToken cancellationToken,
|
||||||
Dictionary<string, object>? parameters = null, bool signed = false, bool checkResult = true) where T : class
|
Dictionary<string, object>? parameters = null, bool signed = false, bool checkResult = true, PostParameters? postPosition = null, ArrayParametersSerialization? arraySerialization = null) where T : class
|
||||||
{
|
{
|
||||||
log.Write(LogVerbosity.Debug, "Creating request for " + uri);
|
log.Write(LogVerbosity.Debug, "Creating request for " + uri);
|
||||||
if (signed && authProvider == null)
|
if (signed && authProvider == null)
|
||||||
@ -177,7 +179,7 @@ namespace CryptoExchange.Net
|
|||||||
return new WebCallResult<T>(null, null, null, new NoApiCredentialsError());
|
return new WebCallResult<T>(null, null, null, new NoApiCredentialsError());
|
||||||
}
|
}
|
||||||
|
|
||||||
var request = ConstructRequest(uri, method, parameters, signed);
|
var request = ConstructRequest(uri, method, parameters, signed, postPosition ?? postParametersPosition, arraySerialization ?? this.arraySerialization);
|
||||||
foreach (var limiter in RateLimiters)
|
foreach (var limiter in RateLimiters)
|
||||||
{
|
{
|
||||||
var limitResult = limiter.LimitRequest(this, uri.AbsolutePath, RateLimitBehaviour);
|
var limitResult = limiter.LimitRequest(this, uri.AbsolutePath, RateLimitBehaviour);
|
||||||
@ -294,17 +296,19 @@ namespace CryptoExchange.Net
|
|||||||
/// <param name="method">The method of the request</param>
|
/// <param name="method">The method of the request</param>
|
||||||
/// <param name="parameters">The parameters of the request</param>
|
/// <param name="parameters">The parameters of the request</param>
|
||||||
/// <param name="signed">Whether or not the request should be authenticated</param>
|
/// <param name="signed">Whether or not the request should be authenticated</param>
|
||||||
|
/// <param name="postPosition">Where the post parameters should be placed</param>
|
||||||
|
/// <param name="arraySerialization">How array paramters should be serialized</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected virtual IRequest ConstructRequest(Uri uri, HttpMethod method, Dictionary<string, object>? parameters, bool signed)
|
protected virtual IRequest ConstructRequest(Uri uri, HttpMethod method, Dictionary<string, object>? parameters, bool signed, PostParameters postPosition, ArrayParametersSerialization arraySerialization)
|
||||||
{
|
{
|
||||||
if (parameters == null)
|
if (parameters == null)
|
||||||
parameters = new Dictionary<string, object>();
|
parameters = new Dictionary<string, object>();
|
||||||
|
|
||||||
var uriString = uri.ToString();
|
var uriString = uri.ToString();
|
||||||
if(authProvider != null)
|
if(authProvider != null)
|
||||||
parameters = authProvider.AddAuthenticationToParameters(uriString, method, parameters, signed);
|
parameters = authProvider.AddAuthenticationToParameters(uriString, method, parameters, signed, postPosition, arraySerialization);
|
||||||
|
|
||||||
if((method == HttpMethod.Get || method == HttpMethod.Delete || postParametersPosition == PostParameters.InUri) && parameters?.Any() == true)
|
if((method == HttpMethod.Get || method == HttpMethod.Delete || postPosition == PostParameters.InUri) && parameters?.Any() == true)
|
||||||
uriString += "?" + parameters.CreateParamString(true, arraySerialization);
|
uriString += "?" + parameters.CreateParamString(true, arraySerialization);
|
||||||
|
|
||||||
var contentType = requestBodyFormat == RequestBodyFormat.Json ? Constants.JsonContentHeader : Constants.FormContentHeader;
|
var contentType = requestBodyFormat == RequestBodyFormat.Json ? Constants.JsonContentHeader : Constants.FormContentHeader;
|
||||||
@ -313,12 +317,12 @@ namespace CryptoExchange.Net
|
|||||||
|
|
||||||
var headers = new Dictionary<string, string>();
|
var headers = new Dictionary<string, string>();
|
||||||
if (authProvider != null)
|
if (authProvider != null)
|
||||||
headers = authProvider.AddAuthenticationToHeaders(uriString, method, parameters!, signed);
|
headers = authProvider.AddAuthenticationToHeaders(uriString, method, parameters!, signed, postPosition, arraySerialization);
|
||||||
|
|
||||||
foreach (var header in headers)
|
foreach (var header in headers)
|
||||||
request.AddHeader(header.Key, header.Value);
|
request.AddHeader(header.Key, header.Value);
|
||||||
|
|
||||||
if ((method == HttpMethod.Post || method == HttpMethod.Put) && postParametersPosition != PostParameters.InUri)
|
if ((method == HttpMethod.Post || method == HttpMethod.Put) && postPosition != PostParameters.InUri)
|
||||||
{
|
{
|
||||||
if(parameters?.Any() == true)
|
if(parameters?.Any() == true)
|
||||||
WriteParamBody(request, parameters, contentType);
|
WriteParamBody(request, parameters, contentType);
|
||||||
@ -346,7 +350,16 @@ namespace CryptoExchange.Net
|
|||||||
{
|
{
|
||||||
var formData = HttpUtility.ParseQueryString(string.Empty);
|
var formData = HttpUtility.ParseQueryString(string.Empty);
|
||||||
foreach (var kvp in parameters.OrderBy(p => p.Key))
|
foreach (var kvp in parameters.OrderBy(p => p.Key))
|
||||||
|
{
|
||||||
|
if (kvp.Value.GetType().IsArray)
|
||||||
|
{
|
||||||
|
var array = (Array)kvp.Value;
|
||||||
|
foreach(var value in array)
|
||||||
|
formData.Add(kvp.Key, value.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
formData.Add(kvp.Key, kvp.Value.ToString());
|
formData.Add(kvp.Key, kvp.Value.ToString());
|
||||||
|
}
|
||||||
var stringData = formData.ToString();
|
var stringData = formData.ToString();
|
||||||
request.SetContent(stringData, contentType);
|
request.SetContent(stringData, contentType);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user