internal static IReadOnlyDictionary GetRequestBindingData()

in src/WebJobs.Extensions.Http/HttpTriggerAttributeBindingProvider.cs [322:378]


            internal static IReadOnlyDictionary<string, object> GetRequestBindingData(HttpRequest request, string body = null, Dictionary<string, Type> bindingDataContract = null)
            {
                // apply binding data from request body if present
                var bindingData = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
                if (request.ContentLength != null && request.ContentLength > 0)
                {
                    Utility.ApplyBindingData(body, bindingData);
                }

                // apply binding data from the query string
                var queryParameters = request.GetQueryParameterDictionary();
                foreach (var pair in queryParameters)
                {
                    if (string.Compare("code", pair.Key, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        // skip any system parameters that should not be bound to
                        continue;
                    }
                    bindingData[pair.Key] = pair.Value.ToString();
                }

                // apply binding data from route parameters
                object value = null;
                if (request.HttpContext.Items.TryGetValue(HttpExtensionConstants.AzureWebJobsHttpRouteDataKey, out value))
                {
                    var routeBindingData = (Dictionary<string, object>)value;
                    foreach (var pair in routeBindingData)
                    {
                        // if we have a static binding contract that maps to this parameter
                        // derive the type from that contract mapping and perform any
                        // necessary conversion
                        value = pair.Value;
                        Type type = null;
                        if (bindingDataContract != null &&
                            bindingDataContract.TryGetValue(pair.Key, out type))
                        {
                            value = ConvertValueIfNecessary(value, type);
                        }

                        bindingData[pair.Key] = value;
                    }
                }

                // add query parameter collection to binding data
                if (!bindingData.ContainsKey(HttpQueryKey))
                {
                    bindingData[HttpQueryKey] = queryParameters;
                }

                // add headers collection to binding data
                if (!bindingData.ContainsKey(HttpHeadersKey))
                {
                    bindingData[HttpHeadersKey] = request.Headers.ToDictionary(kvp => kvp.Key, kvp => kvp.Value.ToString(), StringComparer.OrdinalIgnoreCase);
                }

                return bindingData;
            }