Exemplo n.º 1
0
        public override void BindContent(ContentModelBindingContext bindingContext)
        {
            EnsureTemplateResult ensureTemplateResult = EnsureTemplate(bindingContext);

            if (ensureTemplateResult.BindingCompleted)
            {
                return;
            }

            ModelDictionaryResult result = bindingContext.ModelContentResolver.Resolve(bindingContext.Parameters,
                                                                                       bindingContext.Args,
                                                                                       ensureTemplateResult.ParameterOffset);

            bindingContext.TryUpdateUri(result.Dictionary);
        }
Exemplo n.º 2
0
        public override void BindContent(ContentModelBindingContext bindingContext)
        {
            EnsureTemplateResult ensureTemplateResult = EnsureTemplate(bindingContext);

            if (ensureTemplateResult.BindingCompleted)
            {
                return;
            }

            var parameterOffset          = ensureTemplateResult.ParameterOffset;
            ModelDictionaryResult result = bindingContext.ModelContentResolver.Resolve(bindingContext.Parameters,
                                                                                       bindingContext.Args,
                                                                                       parameterOffset,
                                                                                       ensureTemplateResult.IgnoreModelPrefix);

            var contentType = bindingContext.ContentType;

            if (contentType == ContentType.MultipartFormData)
            {
                var content = GetMultipartFormDataContent(result);
                bindingContext.ContentResult = ContentModelBindingResult.Success(content);
                return;
            }

            if (contentType == ContentType.FormUrlEncoded)
            {
                var content = GetUrlEncodedContent(result);
                bindingContext.ContentResult = ContentModelBindingResult.Success(content);
                return;
            }

            var remainingParameterCount = bindingContext.ArgsLength - parameterOffset;

            if (remainingParameterCount <= 0)
            {
                // all parameters are resolved as Key - Url
                return;
            }

            var segments = new ArraySegment <object>(bindingContext.Args, parameterOffset, remainingParameterCount);

            bindingContext.ContentResult = ContentModelBindingResult.Success(SerializeToString(contentType, segments));
        }
        public async Task CreateRequestContentAsync(RequestDescriptor requestContext,
                                                    HttpRequestMessage request,
                                                    ProxyMethodDescriptor descriptor,
                                                    UriBuilder uriBuilder)
        {
            await Task.CompletedTask;

            var httpMethod         = descriptor.HttpMethod;
            var contentModelBinder = ContentBinderFactory.GetContentModelBinder(_serviceProvider, httpMethod, descriptor.ContentType);

            var bindingContext = new ContentModelBindingContext(httpMethod, descriptor, uriBuilder)
            {
                ContentType          = descriptor.ContentType,
                ModelContentResolver = ContentResolver,
                Args = requestContext.Args,
            };

            contentModelBinder.BindContent(bindingContext);
            bindingContext.TrySetContent(request);
            request.RequestUri = bindingContext.Uri;
        }
Exemplo n.º 4
0
        protected virtual EnsureTemplateResult EnsureTemplate(ContentModelBindingContext bindingContext)
        {
            int parameterOffset = 0;

            if (bindingContext.HasAnyTemplateParameterKey)
            {
                for (int i = 0; i < bindingContext.TemplateParameterKeys.Count; i++)
                {
                    var keyParameter     = bindingContext.TemplateParameterKeys[i];
                    var keyModelMetadata = bindingContext.Parameters.FirstOrDefault(x => x.PropertyName == keyParameter);
                    if (keyModelMetadata == null)
                    {
                        throw new ArgumentOutOfRangeException("Key parameter name does not match the template key. Please check template key(s) of the method.");
                    }

                    var value = bindingContext.ModelContentResolver.ResolveParameter(keyModelMetadata, bindingContext.Args[i], false);
                    bindingContext.UriBuilder.Path += ($"/{WebUtility.UrlEncode(value)}");
                    parameterOffset++;
                }
            }

            bool ignorePrefix = false;

            if (parameterOffset == bindingContext.ArgsLength - 1)
            {
                ignorePrefix = true;
            }

            if (parameterOffset == bindingContext.ArgsLength)
            {
                // all parameters are resolved
                return(EnsureTemplateResult.Completed(parameterOffset, ignorePrefix));
            }

            return(EnsureTemplateResult.Continue(parameterOffset, ignorePrefix));
        }
Exemplo n.º 5
0
 public abstract void BindContent(ContentModelBindingContext bindingContext);
Exemplo n.º 6
0
 public override void BindContent(ContentModelBindingContext bindingContext)
 {
     base.BindContent(bindingContext);
 }