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); }