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