private (IEnumerable <INameValue> head, string query, string data, IEnumerable <IFormDataParameters> conditions) GetEnvironmentInputVariables(IExecutionEnvironment environment, int update) { IEnumerable <INameValue> head = null; if (Headers != null) { head = Headers.Select(a => new NameValue(ExecutionEnvironment.WarewolfEvalResultToString(environment.Eval(a.Name, update)), ExecutionEnvironment.WarewolfEvalResultToString(environment.Eval(a.Value, update)))); if (IsFormDataChecked) { var headersHelper = new WebRequestHeadersHelper(notEvaluatedHeaders: Headers, evaluatedHeaders: head); head = headersHelper.CalculateFormDataContentType(); } } var query = string.Empty; if (QueryString != null) { query = ExecutionEnvironment.WarewolfEvalResultToString(environment.Eval(QueryString, update)); } var postData = string.Empty; if (PostData != null && IsManualChecked) { postData = ExecutionEnvironment.WarewolfEvalResultToString(environment.Eval(PostData, update, true)); } var conditions = new List <IFormDataParameters>(); if ((Conditions ?? (Conditions = new List <FormDataConditionExpression>())).Any() && IsFormDataChecked) { _errorsTo = new ErrorResultTO(); conditions = Conditions.SelectMany(o => o.Eval(GetArgumentsFunc, _errorsTo.HasErrors())).ToList(); } IEnumerable <string[]> GetArgumentsFunc(string col1s, string col2s, string col3s) { var col1 = environment.EvalAsList(col1s, 0, true); var col2 = environment.EvalAsList(col2s ?? "", 0, true); var col3 = environment.EvalAsList(col3s ?? "", 0, true); var iter = new WarewolfListIterator(); var c1 = new WarewolfAtomIterator(col1); var c2 = new WarewolfAtomIterator(col2); var c3 = new WarewolfAtomIterator(col3); iter.AddVariableToIterateOn(c1); iter.AddVariableToIterateOn(c2); iter.AddVariableToIterateOn(c3); while (iter.HasMoreData()) { var item = new[] { iter.FetchNextValue(c1), iter.FetchNextValue(c2), iter.FetchNextValue(c3) }; yield return(item); } yield break; } return(head, query, postData, conditions); }
public static void ExecuteRequest(WebService service, bool throwError, out ErrorResultTO errors, WebExecuteString webExecute) { var headers = new List <string>(); var evaluatedHeaders = new List <INameValue>(); if (service.Headers != null) { evaluatedHeaders = service.Headers.Select(o => new NameValue(SetParameters(service.Method.Parameters, o.Name), SetParameters(service.Method.Parameters, o.Value)) as INameValue).ToList(); headers.AddRange(ToHeaderStringList(evaluatedHeaders)); } var requestUrl = SetParameters(service.Method.Parameters, service.RequestUrl); var requestBody = string.Empty; var IsClassicRequestBody = !service.IsManualChecked && !service.IsFormDataChecked && !service.IsUrlEncodedChecked; if (service.IsManualChecked || IsClassicRequestBody) { requestBody = SetParameters(service.Method.Parameters, service.RequestBody); } var formDataParameters = new List <IFormDataParameters>(); if ((service.IsFormDataChecked || service.IsUrlEncodedChecked) && service.FormDataParameters != null) { var headersHelper = new WebRequestHeadersHelper(service.Headers, evaluatedHeaders); var evaluated = headersHelper.CalculateFormDataContentType(); headers = ToHeaderStringList(evaluated.ToList()); formDataParameters.AddRange(service.FormDataParameters.Select(o => { if (o is TextParameter textParam) { textParam.Key = SetParameters(service.Method.Parameters, textParam.Key); textParam.Value = SetParameters(service.Method.Parameters, textParam.Value); return(textParam); } else if (o is FileParameter fileParam) { fileParam.Key = SetParameters(service.Method.Parameters, fileParam.Key); fileParam.FileName = SetParameters(service.Method.Parameters, fileParam.FileName); fileParam.FileBase64 = SetParameters(service.Method.Parameters, fileParam.FileBase64); return(fileParam); } return(o); }).ToList()); } var webExecuteStringArgs = new WebExecuteStringArgs { IsManualChecked = service.IsManualChecked, IsFormDataChecked = service.IsFormDataChecked, IsUrlEncodedChecked = service.IsUrlEncodedChecked, FormDataParameters = service.FormDataParameters, WebRequestFactory = null }; var webResponse = webExecute?.Invoke(service.Source as WebSource, service.RequestMethod, requestUrl, requestBody, throwError, out errors, headers.ToArray(), webExecuteStringArgs); service.RequestResponse = Scrubber.Scrub(webResponse); if (!String.IsNullOrEmpty(service.JsonPath)) { service.ApplyPath(); } errors = new ErrorResultTO(); }