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