Exemple #1
0
        private async Task <BindResult> Read(HttpContent content,
                                             ParameterDescriptor requestParameter,
                                             RequestBinderContext context)
        {
            var readContext = content.CreateReaderContext(_actionDescriptor);
            var reader      = _actionDescriptor.RequestReaders
                              .ThatApplyToOrDefault(_readers, readContext)
                              .FirstOrDefault();

            if (reader == null)
            {
                return(BindResult.NoReader());
            }

            var result = await reader.Read(readContext);

            if (result.Status == ReadStatus.Failure)
            {
                return(BindResult.Failure(result.ErrorMessage));
            }
            context.ActionArguments[requestParameter.Position] = result.Value;
            return(BindResult.Success());
        }
Exemple #2
0
        public virtual async Task <BindResult> Bind(RequestBinderContext context)
        {
            var position = _actionDescriptor.Route.RequestParameter.Position;
            var headers  = _requestMessage.Content?.Headers;

            if ((headers?.ContentLength ?? 0) == 0)
            {
                if (_configuration.CreateEmptyRequestParameterValue)
                {
                    context.ActionArguments[position] = _actionDescriptor
                                                        .Route.RequestParameter.ParameterType.TryCreate();
                }
                return(BindResult.Success());
            }

            var readContext = _requestMessage.Content
                              .CreateReaderContext(_actionDescriptor);
            var reader = _actionDescriptor.RequestReaders
                         .ThatApplyToOrDefault(_readers, readContext)
                         .FirstOrDefault();

            if (reader == null)
            {
                return(BindResult.NoReader());
            }

            var result = await reader.Read(readContext);

            if (result.Status == ReadStatus.Failure)
            {
                return(BindResult.Failure(result.ErrorMessage));
            }

            context.ActionArguments[position] = result.Value;
            return(BindResult.Success());
        }