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