public async Task<ITriggerData> BindAsync(object value, ValueBindingContext context)
        {
            HttpRequestMessage request = value as HttpRequestMessage;
            WebHookContext webHookContext = value as WebHookContext;

            if (request == null && webHookContext != null)
            {
                request = webHookContext.Request;
            }

            if (request == null && value != null && value.GetType() == typeof(string))
            {
                // We've received an invoke string (e.g. from a Dashboard replay/invoke
                // so convert to a request
                request = FromInvokeString((string)value);
            }

            if (webHookContext == null)
            {
                webHookContext = new WebHookContext(request);
            }

            IValueProvider valueProvider = null;
            IReadOnlyDictionary<string, object> bindingData = null;
            string invokeString = ToInvokeString(request);
            if (_isUserTypeBinding)
            {
                valueProvider = await CreateUserTypeValueProvider(request, invokeString);
                if (_bindingDataProvider != null)
                {
                    // 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 WebHookRequestValueBinder(_parameter, webHookContext, invokeString);
            }

            return new TriggerData(valueProvider, bindingData);
        }
            public override object GetValue()
            {
                if (_parameter.ParameterType == typeof(HttpRequestMessage))
                {
                    return _request;
                }
                else if (_parameter.ParameterType == typeof(WebHookContext))
                {
                    // when binding to WebHookContext, we add the context to the request
                    // property bag so we can pull it out later in the WebHookDispatcher to access
                    // the response value, etc.
                    WebHookContext context = new WebHookContext(_request);
                    _request.Properties.Add(WebHookContextRequestKey, context);

                    return context;
                }
                return base.GetValue();
            }
 public WebHookRequestValueBinder(ParameterInfo parameter, WebHookContext context, string invokeString)
     : base(parameter)
 {
     _parameter = parameter;
     _context = context;
     _invokeString = invokeString;
 }