public HttpMethodsProvider()

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