Пример #1
0
        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);
        }
Пример #3
0
        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));
        }