public async Task <object[]> ReadParametersAsync(Stream stream, IReadOnlyList <ParameterMetadata> parameters, long contentLength) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (parameters == null || parameters.Count == 0) { throw new ArgumentNullException(nameof(parameters)); } object[] values = await DoReadParametersAsync(stream, parameters, contentLength); for (int i = 0; i < values.Length; i++) { var rawValue = values[i]; if (rawValue != null) { if (Convert.GetTypeCode(rawValue) != TypeCode.Object) { rawValue = Convert.ChangeType(rawValue, parameters[i].Type, CultureInfo.InvariantCulture); } } values[i] = rawValue; } ActionMetadata.ValidateParameters(parameters, values); return(values); }
protected virtual HttpContent BuildRequestContent(ClientActionContext context) { ActionMetadata metadata = context.GetActionOrThrow(); if (metadata.HasSerializableParameters) { try { metadata.ValidateParameters(context.Parameters); } catch (Exception e) { throw new BoltClientException( $"Parameter validation failed for action '{context.Action.Name}'.", ClientErrorCode.SerializeParameters, context.Action.Name, e); } } if (context.Action.HasSerializableParameters) { return(new SerializeParametersContent(Serializer, context)); } return(null); }
public Task WriteParametersAsync(Stream stream, IReadOnlyList <ParameterMetadata> parameters, object[] values, Action <long> onContentLength) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (parameters == null || parameters.Count == 0) { return(Task.CompletedTask); } ActionMetadata.ValidateParameters(parameters, values); for (int i = 0; i < parameters.Count; i++) { var parameterMetadata = parameters[i]; if (!parameterMetadata.IsSerializable) { values[i] = null; } } return(DoWriteParametersAsync(stream, parameters, values, onContentLength)); }