private static Dictionary<string, object> GetFunctionArguments(FunctionDescriptor function, HttpRequestMessage request)
{
ParameterDescriptor triggerParameter = function.Parameters.First(p => p.IsTrigger);
Dictionary<string, object> arguments = new Dictionary<string, object>();
if (triggerParameter.Type != typeof(HttpRequestMessage))
{
HttpTriggerBindingMetadata httpFunctionMetadata = (HttpTriggerBindingMetadata)function.Metadata.InputBindings.FirstOrDefault(p => string.Compare("HttpTrigger", p.Type, StringComparison.OrdinalIgnoreCase) == 0);
if (!string.IsNullOrEmpty(httpFunctionMetadata.WebHookType))
{
WebHookHandlerContext webHookContext;
if (request.Properties.TryGetValue(ScriptConstants.AzureFunctionsWebHookContextKey, out webHookContext))
{
// For WebHooks we want to use the WebHook library conversion methods
// Stuff the resolved data into the request context so the HttpTrigger binding
// can access it
var webHookData = GetWebHookData(triggerParameter.Type, webHookContext);
request.Properties.Add(ScriptConstants.AzureFunctionsWebHookDataKey, webHookData);
}
}
// see if the function defines a parameter to receive the HttpRequestMessage and
// if so, pass it along
ParameterDescriptor requestParameter = function.Parameters.FirstOrDefault(p => p.Type == typeof(HttpRequestMessage));
if (requestParameter != null)
{
arguments.Add(requestParameter.Name, request);
}
}
arguments.Add(triggerParameter.Name, request);
return arguments;
}