public async Task HandleRequest()

in core/net6.0/proxy/Apache.OpenWhisk.Runtime.Common/Run.cs [42:128]


        public async Task HandleRequest(HttpContext httpContext)
        {
            if (_type == null || _method == null || _constructor == null)
            {
                await httpContext.Response.WriteError("Cannot invoke an uninitialized action.");
                return;
            }

            try
            {
                string body = await new StreamReader(httpContext.Request.Body).ReadToEndAsync();

                JObject inputObject = string.IsNullOrEmpty(body) ? null : JObject.Parse(body);

                JObject valObject = null;
                JArray valArray = null;

                if (inputObject != null)
                {
                    valObject = inputObject["value"] as JObject;
                    foreach (JToken token in inputObject.Children())
                    {
                        try
                        {
                            if (token.Path.Equals("value", StringComparison.InvariantCultureIgnoreCase))
                                continue;
                            string envKey = $"__OW_{token.Path.ToUpperInvariant()}";
                            string envVal = token.First.ToString();
                            Environment.SetEnvironmentVariable(envKey, envVal);
                            //Console.WriteLine($"Set environment variable \"{envKey}\" to \"{envVal}\".");
                        }
                        catch (Exception)
                        {
                            await Console.Error.WriteLineAsync(
                                $"Unable to set environment variable for the \"{token.Path}\" token.");
                        }
                    }
                    if (valObject == null) {
                        valArray = inputObject["value"] as JArray;
                    }
                }

                object owObject = _constructor.Invoke(new object[] { });

                try
                {
                    JContainer output;

                    if(_awaitableMethod) {
                        if (valObject != null) {
                            output = (JContainer) await (dynamic) _method.Invoke(owObject, new object[] {valObject});
                        } else {
                            output = (JContainer) await (dynamic) _method.Invoke(owObject, new object[] {valArray});
                        }
                    }
                    else {
                        if (valObject != null) {
                            output = (JContainer) _method.Invoke(owObject, new object[] {valObject});
                        } else {
                            output = (JContainer) _method.Invoke(owObject, new object[] {valArray});
                        }
                    }

                    if (output == null)
                    {
                        await httpContext.Response.WriteError("The action returned null");
                        Console.Error.WriteLine("The action returned null");
                        return;
                    }

                    await httpContext.Response.WriteResponse(200, output.ToString());
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine(ex.StackTrace);
                    await httpContext.Response.WriteError(ex.Message
#if DEBUG
                                                          + ", " + ex.StackTrace
#endif
                    );
                }
            }
            finally
            {
                Startup.WriteLogMarkers();
            }
        }