in src/OrchardCore.Modules/OrchardCore.Workflows/Http/Scripting/HttpMethodsProvider.cs [29:144]
public HttpMethodsProvider(IHttpContextAccessor httpContextAccessor)
{
_httpContextMethod = new GlobalMethod
{
Name = "httpContext",
Method = serviceProvider => (Func<HttpContext>)(() => httpContextAccessor.HttpContext)
};
_queryStringMethod = new GlobalMethod
{
Name = "queryString",
Method = serviceProvider => (Func<string, object>)(name =>
{
if (name == null)
{
return httpContextAccessor.HttpContext.Request.QueryString.ToString();
}
object result;
if (httpContextAccessor.HttpContext.Request.Query.TryGetValue(name, out var values))
{
if (values.Count == 0)
{
result = null;
}
else if (values.Count == 1)
{
result = values[0];
}
else
{
result = values.ToArray();
}
}
else
{
result = null;
}
return result;
})
};
_responseWriteMethod = new GlobalMethod
{
Name = "responseWrite",
Method = serviceProvider => (Action<string>)(text => httpContextAccessor.HttpContext.Response.WriteAsync(text).GetAwaiter().GetResult())
};
_absoluteUrlMethod = new GlobalMethod
{
Name = "absoluteUrl",
Method = serviceProvider => (Func<string, string>)(relativePath =>
{
var urlHelperFactory = serviceProvider.GetRequiredService<IUrlHelperFactory>();
var urlHelper = urlHelperFactory.GetUrlHelper(new ActionContext(httpContextAccessor.HttpContext, new RouteData(), new ActionDescriptor()));
return urlHelper.ToAbsoluteUrl(relativePath);
})
};
_readBodyMethod = new GlobalMethod
{
Name = "readBody",
Method = serviceProvider => (Func<string>)(() =>
{
using (var sr = new StreamReader(httpContextAccessor.HttpContext.Request.Body))
{
// Async read of the request body is mandatory.
return sr.ReadToEndAsync().GetAwaiter().GetResult();
}
})
};
_requestFormMethod = new GlobalMethod
{
Name = "requestForm",
Method = serviceProvider => (Func<string, object>)(field =>
{
object result;
if (httpContextAccessor.HttpContext.Request.Form.TryGetValue(field, out var values))
{
if (values.Count == 0)
{
result = null;
}
else if (values.Count == 1)
{
result = values[0];
}
else
{
result = values.ToArray();
}
}
else
{
result = null;
}
return result;
})
};
_queryStringAsJsonMethod = new GlobalMethod
{
Name = "queryStringAsJson",
Method = serviceProvider => (Func<JObject>)(() =>
new JObject((from param in httpContextAccessor.HttpContext.Request.Query
select new JProperty(param.Key, JArray.FromObject(param.Value.ToArray()))).ToArray()))
};
_requestFormAsJsonMethod = new GlobalMethod
{
Name = "requestFormAsJson",
Method = serviceProvider => (Func<JObject>)(() =>
new JObject((from field in httpContextAccessor.HttpContext.Request.Form
select new JProperty(field.Key, JArray.FromObject(field.Value.ToArray()))).ToArray()))
};
}