using System.Text.RegularExpressions; using Common; using Infrastructure; using LitJson; using Model; using Model.Custom; using Model.Source; namespace Util.Logic { public class LogicToolNodeHelper { /// /// HTTP请求节点 /// /// 节点数据 /// 参数列表 public static void httpRequest(NodeList node, List paramList) { JsonData nodeData = node.nodeData; string requestMethod = nodeData["data"]["formData"]["requestMethod"]["value"].ToString(); // HTTP方法 string requestUrl = nodeData["data"]["formData"]["requestUrl"]["value"].ToString(); // HTTP请求URL string responseParam = nodeData["data"]["formData"]["output"]["value"].ToString(); // HTTP响应参数 string response = ""; // HTTP响应 if(requestMethod == "GET") // GET请求 { // 处理GET请求参数 JsonData requestParams = nodeData["data"]["formData"]["requestParams"]["value"]; // HTTP请求参数 // 处理GET请求参数中的参数 Dictionary requestParamsDict = new Dictionary(); foreach(JsonData param in requestParams) { string label = param["label"].ToString(); string value = param["value"].ToString(); if (value.Contains('.')) { value = value.Substring(value.LastIndexOf(".") + 1); var paramData = paramList.FirstOrDefault(x => x.paramName == value); if (paramData != null) { value = paramData.paramValue; } } requestParamsDict.Add(label, value); } response = Function.GetWebRequest( requestUrl + "?value=" + Newtonsoft.Json.JsonConvert.SerializeObject(requestParamsDict)); // 发送GET请求 } else if(requestMethod == "POST" || requestMethod == "PUT") // POST/PUT请求 { // 处理POST/PUT请求参数 string requestBody = nodeData["data"]["formData"]["requestBody"]["value"].ToString(); // HTTP请求体 // 处理POST/PUT请求体中的参数 MatchCollection matches = Regex.Matches(requestBody, "${.*?}"); foreach(Match match in matches) { string paramName = match.Value.Replace("${", "").Replace("}", ""); var paramData = paramList.FirstOrDefault(x => x.paramName == paramName); if (paramData != null) { requestBody = requestBody.Replace("{" + paramName + "}", paramData.paramValue); } } response = Function.PostWebRequest( requestUrl, requestBody, requestMethod, "application/json"); // 发送POST/PUT请求 } // 处理POST/PUT请求响应 JsonData responseJson = JsonMapper.ToObject(response); // 处理POST/PUT请求响应中的参数 foreach(JsonData param in responseParam) { string paramName = param["label"].ToString(); string paramType = param["type"][0].ToString(); JsonData paramValue = responseJson[paramName]; ParamList paramListObj = new ParamList(); paramListObj.nodeId = node.nodeId; paramListObj.paramName = paramName; paramListObj.paramType = paramType; if(paramType == "object" || paramType == "array") { paramListObj.paramValue = paramValue.ToJson(); } else { paramListObj.paramValue = paramValue.ToString(); } paramList.Add(paramListObj); } } } }