|
|
@ -96,7 +96,9 @@ namespace ReZero.SuperAPI |
|
|
|
{ |
|
|
|
{ |
|
|
|
string rawJson = formDatas["_rawJson"].ToString(); |
|
|
|
string rawJson = formDatas["_rawJson"].ToString(); |
|
|
|
System.Diagnostics.Debug.WriteLine($"使用_rawJson作为JObject参数: {rawJson}"); |
|
|
|
System.Diagnostics.Debug.WriteLine($"使用_rawJson作为JObject参数: {rawJson}"); |
|
|
|
data.Value = rawJson; |
|
|
|
|
|
|
|
|
|
|
|
// 将原始JSON保存到DataModel的RawJsonData属性中,而不是直接修改参数值 |
|
|
|
|
|
|
|
dataModel.RawJsonData = rawJson; |
|
|
|
|
|
|
|
|
|
|
|
// 特殊处理登录接口:如果是token接口,则需要额外处理参数 |
|
|
|
// 特殊处理登录接口:如果是token接口,则需要额外处理参数 |
|
|
|
if (interInfo.Url == "/api/rezero/token" && dataModel.DefaultParameters.Count == 2) |
|
|
|
if (interInfo.Url == "/api/rezero/token" && dataModel.DefaultParameters.Count == 2) |
|
|
@ -138,6 +140,37 @@ namespace ReZero.SuperAPI |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 从JSON对象中提取字段值并绑定到各个参数 |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(rawJson)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
JObject jsonObj = JObject.Parse(rawJson); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 对所有参数尝试从JSON中获取值,包括第一个参数 |
|
|
|
|
|
|
|
foreach (var param in dataModel.DefaultParameters) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (param?.Name != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// 尝试直接获取属性(不区分大小写) |
|
|
|
|
|
|
|
var prop = jsonObj.Properties().FirstOrDefault(p => |
|
|
|
|
|
|
|
p.Name.Equals(param.Name, StringComparison.OrdinalIgnoreCase)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (prop != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// 根据属性类型进行适当转换,不仅仅是转换为字符串 |
|
|
|
|
|
|
|
param.Value = ConvertJTokenToTypedValue(prop.Value); |
|
|
|
|
|
|
|
Console.WriteLine($"从JSON提取参数: {param.Name} = {param.Value}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Console.WriteLine($"处理JSON参数时出错: {ex.Message}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return; // 已找到JSON数据,提前返回 |
|
|
|
return; // 已找到JSON数据,提前返回 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -149,8 +182,37 @@ namespace ReZero.SuperAPI |
|
|
|
var body = reader.ReadToEndAsync().Result; |
|
|
|
var body = reader.ReadToEndAsync().Result; |
|
|
|
if (!string.IsNullOrEmpty(body)) |
|
|
|
if (!string.IsNullOrEmpty(body)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
data.Value = body; |
|
|
|
// 将原始JSON保存到DataModel的RawJsonData属性中 |
|
|
|
|
|
|
|
dataModel.RawJsonData = body; |
|
|
|
System.Diagnostics.Debug.WriteLine($"JObject参数值设置为: {body}"); |
|
|
|
System.Diagnostics.Debug.WriteLine($"JObject参数值设置为: {body}"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 提取JSON对象中的字段绑定到参数 |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
JObject jsonObj = JObject.Parse(body); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 对所有参数尝试从JSON中获取值,包括第一个参数 |
|
|
|
|
|
|
|
foreach (var param in dataModel.DefaultParameters) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (param?.Name != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// 尝试直接获取属性(不区分大小写) |
|
|
|
|
|
|
|
var prop = jsonObj.Properties().FirstOrDefault(p => |
|
|
|
|
|
|
|
p.Name.Equals(param.Name, StringComparison.OrdinalIgnoreCase)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (prop != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// 根据属性类型进行适当转换 |
|
|
|
|
|
|
|
param.Value = ConvertJTokenToTypedValue(prop.Value); |
|
|
|
|
|
|
|
Console.WriteLine($"从JSON提取参数: {param.Name} = {param.Value}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Console.WriteLine($"处理JSON参数时出错: {ex.Message}"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (formDatas.ContainsKey("methodName") && formDatas.ContainsKey("data")) |
|
|
|
else if (formDatas.ContainsKey("methodName") && formDatas.ContainsKey("data")) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -160,13 +222,31 @@ namespace ReZero.SuperAPI |
|
|
|
methodName = formDatas["methodName"], |
|
|
|
methodName = formDatas["methodName"], |
|
|
|
data = formDatas["data"] |
|
|
|
data = formDatas["data"] |
|
|
|
}; |
|
|
|
}; |
|
|
|
data.Value = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj); |
|
|
|
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj); |
|
|
|
System.Diagnostics.Debug.WriteLine($"从formDatas构建JObject参数: {data.Value}"); |
|
|
|
dataModel.RawJsonData = jsonString; |
|
|
|
|
|
|
|
System.Diagnostics.Debug.WriteLine($"从formDatas构建JObject参数: {jsonString}"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 提取methodName和data字段到相应参数 |
|
|
|
|
|
|
|
if (dataModel.DefaultParameters.Count > 0) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
var methodNameParam = dataModel.DefaultParameters.FirstOrDefault(p => p.Name?.EqualsCase("methodName") == true); |
|
|
|
|
|
|
|
if (methodNameParam != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
methodNameParam.Value = formDatas["methodName"].ToString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var dataParam = dataModel.DefaultParameters.FirstOrDefault(p => p.Name?.EqualsCase("data") == true); |
|
|
|
|
|
|
|
if (dataParam != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
dataParam.Value = formDatas["data"].ToString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
{ |
|
|
|
{ |
|
|
|
data.Value = Newtonsoft.Json.JsonConvert.SerializeObject(formDatas); |
|
|
|
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(formDatas); |
|
|
|
System.Diagnostics.Debug.WriteLine($"使用formDatas序列化作为JObject参数: {data.Value}"); |
|
|
|
dataModel.RawJsonData = jsonString; |
|
|
|
|
|
|
|
System.Diagnostics.Debug.WriteLine($"使用formDatas序列化作为JObject参数: {jsonString}"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
context.Request.Body.Position = 0; |
|
|
|
context.Request.Body.Position = 0; |
|
|
@ -174,7 +254,7 @@ namespace ReZero.SuperAPI |
|
|
|
catch (Exception ex) |
|
|
|
catch (Exception ex) |
|
|
|
{ |
|
|
|
{ |
|
|
|
System.Diagnostics.Debug.WriteLine($"处理JObject参数异常: {ex.Message}"); |
|
|
|
System.Diagnostics.Debug.WriteLine($"处理JObject参数异常: {ex.Message}"); |
|
|
|
data.Value = Newtonsoft.Json.JsonConvert.SerializeObject(formDatas); |
|
|
|
dataModel.RawJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(formDatas); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -224,7 +304,40 @@ namespace ReZero.SuperAPI |
|
|
|
|
|
|
|
|
|
|
|
private void UpdateWhereItemValue(HttpContext context, Dictionary<string, object> formDatas, DataModelDefaultParameter item) |
|
|
|
private void UpdateWhereItemValue(HttpContext context, Dictionary<string, object> formDatas, DataModelDefaultParameter item) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
// 添加调试日志 |
|
|
|
|
|
|
|
if (item?.Name?.Equals("Name", StringComparison.OrdinalIgnoreCase) == true) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Console.WriteLine($"正在处理Name参数: 当前值={item.Value ?? "null"}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 先尝试从表单和查询字符串获取值 |
|
|
|
item.Value = GetParameterValueFromRequest(item, context, formDatas); |
|
|
|
item.Value = GetParameterValueFromRequest(item, context, formDatas); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果没有获取到值且存在_rawJson,尝试从JSON中获取 |
|
|
|
|
|
|
|
if ((item.Value == null || string.IsNullOrEmpty(item.Value.ToString())) && |
|
|
|
|
|
|
|
formDatas.ContainsKey("_rawJson") && !string.IsNullOrEmpty(item.Name)) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
try |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
string rawJson = formDatas["_rawJson"].ToString(); |
|
|
|
|
|
|
|
var jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(rawJson); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 尝试直接找到匹配的属性(不区分大小写) |
|
|
|
|
|
|
|
var prop = jsonObj?.Properties().FirstOrDefault(p => |
|
|
|
|
|
|
|
p.Name.Equals(item.Name, StringComparison.OrdinalIgnoreCase)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (prop != null) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
item.Value = ConvertJTokenToTypedValue(prop.Value); |
|
|
|
|
|
|
|
Console.WriteLine($"从JSON中提取参数: {item.Name} = {item.Value}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
catch (Exception ex) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Console.WriteLine($"从JSON提取参数时出错: {ex.Message}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (IsDefaultValue(item)) |
|
|
|
if (IsDefaultValue(item)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
item.Value = item.DefaultValue; |
|
|
|
item.Value = item.DefaultValue; |
|
|
@ -243,13 +356,13 @@ namespace ReZero.SuperAPI |
|
|
|
{ |
|
|
|
{ |
|
|
|
item.Value = PubMethod.ConvertFromBase64(item.Value + ""); |
|
|
|
item.Value = PubMethod.ConvertFromBase64(item.Value + ""); |
|
|
|
} |
|
|
|
} |
|
|
|
//if (!string.IsNullOrEmpty(item?.FieldName)) |
|
|
|
|
|
|
|
//{ |
|
|
|
|
|
|
|
// item.Name = item.FieldName; |
|
|
|
|
|
|
|
//} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 再次记录处理后的值 |
|
|
|
|
|
|
|
if (item?.Name?.Equals("Name", StringComparison.OrdinalIgnoreCase) == true) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Console.WriteLine($"Name参数处理后: 值={item.Value ?? "null"}"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static bool NoPageParameters(DataModelDefaultParameter it) |
|
|
|
private static bool NoPageParameters(DataModelDefaultParameter it) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -280,7 +393,13 @@ namespace ReZero.SuperAPI |
|
|
|
{ |
|
|
|
{ |
|
|
|
return parameter.Value + ""; |
|
|
|
return parameter.Value + ""; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 先尝试从查询字符串中获取 |
|
|
|
string parameterValue = context.Request.Query[parameter.Name]; |
|
|
|
string parameterValue = context.Request.Query[parameter.Name]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果查询字符串没有,再尝试从表单数据中获取 |
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(parameterValue)) |
|
|
|
|
|
|
|
{ |
|
|
|
var formData = formDatas.FirstOrDefault(it => it.Key.EqualsCase(parameter.Name ?? "")); |
|
|
|
var formData = formDatas.FirstOrDefault(it => it.Key.EqualsCase(parameter.Name ?? "")); |
|
|
|
if (formData.Key == null) |
|
|
|
if (formData.Key == null) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -291,6 +410,8 @@ namespace ReZero.SuperAPI |
|
|
|
{ |
|
|
|
{ |
|
|
|
parameterValue = formData.Value + ""; |
|
|
|
parameterValue = formData.Value + ""; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
parameter.Value = parameterValue; |
|
|
|
parameter.Value = parameterValue; |
|
|
|
return parameterValue; |
|
|
|
return parameterValue; |
|
|
|
} |
|
|
|
} |
|
|
@ -395,5 +516,33 @@ namespace ReZero.SuperAPI |
|
|
|
}; |
|
|
|
}; |
|
|
|
return context.Request.ContentType != null && contentTypes.Any(context.Request.ContentType.Contains); |
|
|
|
return context.Request.ContentType != null && contentTypes.Any(context.Request.ContentType.Contains); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据JToken类型转换为适当的.NET类型 |
|
|
|
|
|
|
|
private object ConvertJTokenToTypedValue(JToken token) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
switch (token.Type) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
case JTokenType.String: |
|
|
|
|
|
|
|
return token.Value<string>(); |
|
|
|
|
|
|
|
case JTokenType.Integer: |
|
|
|
|
|
|
|
return token.Value<long>(); |
|
|
|
|
|
|
|
case JTokenType.Float: |
|
|
|
|
|
|
|
return token.Value<double>(); |
|
|
|
|
|
|
|
case JTokenType.Boolean: |
|
|
|
|
|
|
|
return token.Value<bool>(); |
|
|
|
|
|
|
|
case JTokenType.Date: |
|
|
|
|
|
|
|
return token.Value<DateTime>(); |
|
|
|
|
|
|
|
case JTokenType.Null: |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
case JTokenType.Object: |
|
|
|
|
|
|
|
// 对于对象,返回序列化的JSON字符串而不是JObject本身 |
|
|
|
|
|
|
|
return token.ToString(); |
|
|
|
|
|
|
|
case JTokenType.Array: |
|
|
|
|
|
|
|
// 对于数组,返回序列化的JSON字符串而不是JArray本身 |
|
|
|
|
|
|
|
return token.ToString(); |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
return token.ToString(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|