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); }
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; }
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)); }
public abstract void BindContent(ContentModelBindingContext bindingContext);
public override void BindContent(ContentModelBindingContext bindingContext) { base.BindContent(bindingContext); }