Exemplo n.º 1
0
            public async Task <ITriggerData> BindAsync(object value, ValueBindingContext context)
            {
                HttpRequestMessage request = value as HttpRequestMessage;

                if (request == null)
                {
                    throw new NotSupportedException("An HttpRequestMessage is required");
                }

                IValueProvider valueProvider = null;
                IReadOnlyDictionary <string, object> bindingData = null;
                string invokeString = ToInvokeString(request);

                if (_isUserTypeBinding)
                {
                    valueProvider = await CreateUserTypeValueProvider(request, invokeString);

                    if (_bindingDataProvider != null)
                    {
                        // binding data is defined by the user type
                        // the provider might be null if the Type is invalid, or if the Type
                        // has no public properties to bind to
                        bindingData = _bindingDataProvider.GetBindingData(valueProvider.GetValue());
                    }
                }
                else
                {
                    valueProvider = new HttpRequestValueBinder(_parameter, request, invokeString);
                    bindingData   = await GetRequestBindingDataAsync(request);
                }

                return(new TriggerData(valueProvider, bindingData));
            }
            public async Task <ITriggerData> BindAsync(object value, ValueBindingContext context)
            {
                HttpRequest request = value as HttpRequest;

                if (request == null)
                {
                    throw new NotSupportedException("An HttpRequest is required");
                }

                IValueProvider valueProvider = null;
                object         poco          = null;
                IReadOnlyDictionary <string, object> userTypeBindingData = null;
                string invokeString = ToInvokeString(request);

                if (_isUserTypeBinding)
                {
                    valueProvider = await CreateUserTypeValueProvider(request, invokeString);

                    if (_bindingDataProvider != null)
                    {
                        // some binding data is defined by the user type
                        // the provider might be null if the Type is invalid, or if the Type
                        // has no public properties to bind to
                        poco = await valueProvider.GetValueAsync();

                        userTypeBindingData = _bindingDataProvider.GetBindingData(poco);
                    }
                }
                else
                {
                    valueProvider = new HttpRequestValueBinder(_parameter, request, invokeString);
                }

                // create a modifiable collection of binding data and
                // copy in any initial binding data from the poco
                var aggregateBindingData = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);

                aggregateBindingData.AddRange(userTypeBindingData);

                aggregateBindingData[RequestBindingName] = request;

                // Apply additional binding data coming from request route, query params, etc.
                var requestBindingData = await GetRequestBindingDataAsync(request, _bindingDataContract);

                aggregateBindingData.AddRange(requestBindingData);

                // apply binding data to the user type
                if (poco != null && aggregateBindingData.Count > 0)
                {
                    ApplyBindingData(poco, aggregateBindingData);
                }

                IValueBinder returnProvider = new ResponseHandler(request, _responseHook);

                return(new TriggerData(valueProvider, aggregateBindingData)
                {
                    ReturnValueProvider = returnProvider
                });
            }
            public async Task <ITriggerData> BindAsync(object value, ValueBindingContext context)
            {
                HttpRequest request = value as HttpRequest;

                if (request == null)
                {
                    throw new NotSupportedException("An HttpRequest is required");
                }

                IValueProvider valueProvider = null;
                string         invokeString  = ToInvokeString(request);

                if (_isUserTypeBinding)
                {
                    valueProvider = await CreateUserTypeValueProvider(request, invokeString);
                }
                else
                {
                    valueProvider = new HttpRequestValueBinder(_parameter, request, invokeString);
                }

                object poco = null;

                if (_bindingDataProvider != null)
                {
                    // some binding data is defined by the user type
                    // the provider might be null if the Type is invalid, or if the Type
                    // has no public properties to bind to
                    poco = await valueProvider.GetValueAsync();
                }

                string body = null;

                if (request.ContentLength != null && request.ContentLength > 0)
                {
                    body = await request.ReadAsStringAsync();
                }

                IReadOnlyDictionary <string, object> bindingData = null;

                if (poco != null)
                {
                    // We're binding to a POCO, so we can't defer binding data resolution.
                    // We must apply it now to the POCO instance.
                    bindingData = GetBindingData(request, poco, body);
                }
                else
                {
                    // In all other cases, binding data resolution can be deferred until it
                    // is requested by the binding pipeline. In many cases it won't be (e.g.
                    // if no other input/output bindings are used).
                    bindingData = new LazyBindingData(() => GetBindingData(request, poco, body));
                }

                return(new TriggerData(valueProvider, bindingData)
                {
                    ReturnValueProvider = new ResponseHandler(request, _responseHook)
                });
            }
            public async Task<ITriggerData> BindAsync(object value, ValueBindingContext context)
            {
                HttpRequestMessage request = value as HttpRequestMessage;
                if (request == null)
                {
                    throw new NotSupportedException("An HttpRequestMessage is required");
                }

                IValueProvider valueProvider = null;
                object poco = null;
                IReadOnlyDictionary<string, object> userTypeBindingData = null;
                string invokeString = ToInvokeString(request);
                if (_isUserTypeBinding)
                {
                    valueProvider = await CreateUserTypeValueProvider(request, invokeString);
                    if (_bindingDataProvider != null)
                    {
                        // some binding data is defined by the user type
                        // the provider might be null if the Type is invalid, or if the Type
                        // has no public properties to bind to
                        poco = valueProvider.GetValue();
                        userTypeBindingData = _bindingDataProvider.GetBindingData(poco);
                    }
                }
                else
                {
                    valueProvider = new HttpRequestValueBinder(_parameter, request, invokeString);
                }

                // create a modifiable collection of binding data and
                // copy in any initial binding data from the poco
                var aggregateBindingData = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
                aggregateBindingData.AddRange(userTypeBindingData);

                // Apply additional binding data coming from request route, query params, etc.
                var requestBindingData = await GetRequestBindingDataAsync(request, _bindingDataContract);
                aggregateBindingData.AddRange(requestBindingData);

                // apply binding data to the user type
                if (poco != null && aggregateBindingData.Count > 0)
                {
                    ApplyBindingData(poco, aggregateBindingData);
                }

                return new TriggerData(valueProvider, aggregateBindingData);
            }