mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-09-20 18:47:55 +08:00
fix 动态API不能执行服务
This commit is contained in:
@@ -345,19 +345,59 @@ namespace OpenAuth.App
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="req">调用参数</param>
|
/// <param name="req">调用参数</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public TableData Invoke(InvokeDynamicReq req)
|
public object Invoke(InvokeDynamicReq req)
|
||||||
{
|
{
|
||||||
// 获取服务实例
|
var result = new object();
|
||||||
var serviceType = Type.GetType($"OpenAuth.App.{req.ServiceName}");
|
|
||||||
var service = _serviceProvider.GetService(serviceType);
|
|
||||||
|
|
||||||
// 获取并调用方法
|
// 获取服务类型
|
||||||
var method = serviceType.GetMethod(req.MethodName);
|
var serviceType = Type.GetType($"OpenAuth.App.{req.ServiceName}, OpenAuth.App");
|
||||||
var result = method.Invoke(service, new[] { req.Parameters });
|
if (serviceType == null)
|
||||||
return new TableData
|
|
||||||
{
|
{
|
||||||
data = result,
|
throw new Exception($"未找到服务类型:{req.ServiceName}");
|
||||||
};
|
}
|
||||||
|
|
||||||
|
// 获取服务实例
|
||||||
|
var service = _serviceProvider.GetService(serviceType);
|
||||||
|
if (service == null)
|
||||||
|
{
|
||||||
|
throw new Exception($"无法获取服务实例:{req.ServiceName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取方法信息
|
||||||
|
var method = serviceType.GetMethod(req.MethodName);
|
||||||
|
if (method == null)
|
||||||
|
{
|
||||||
|
throw new Exception($"未找到方法:{req.MethodName}");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 调用方法
|
||||||
|
// 将对象转换为字典
|
||||||
|
var dict = req.Parameters.ToDictionary();
|
||||||
|
|
||||||
|
// 获取方法参数信息
|
||||||
|
var parameters = method.GetParameters();
|
||||||
|
var paramValues = new object[parameters.Length];
|
||||||
|
|
||||||
|
// 构建参数数组
|
||||||
|
for (int i = 0; i < parameters.Length; i++)
|
||||||
|
{
|
||||||
|
var param = parameters[i];
|
||||||
|
if (dict.ContainsKey(param.Name))
|
||||||
|
{
|
||||||
|
// 将字典中的值转换为参数类型
|
||||||
|
paramValues[i] = Convert.ChangeType(dict[param.Name], param.ParameterType);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 如果字典中没有对应的参数,使用默认值
|
||||||
|
paramValues[i] = param.HasDefaultValue ? param.DefaultValue : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用参数数组调用方法
|
||||||
|
result = method.Invoke(service, paramValues);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -83,5 +83,15 @@ namespace OpenAuth.App.Test
|
|||||||
Parameters = new { userid = "0ceff0f8-f848-440c-bc26-d8605ac858cd" } });
|
Parameters = new { userid = "0ceff0f8-f848-440c-bc26-d8605ac858cd" } });
|
||||||
Console.WriteLine(JsonHelper.Instance.Serialize(obj));
|
Console.WriteLine(JsonHelper.Instance.Serialize(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestInvoke2()
|
||||||
|
{
|
||||||
|
var app = _autofacServiceProvider.GetService<DynamicApiApp>();
|
||||||
|
|
||||||
|
var obj = app.Invoke(new InvokeDynamicReq { ServiceName = "UserManagerApp", MethodName = "Load",
|
||||||
|
Parameters = new { page = 1, limit = 10, key = "" } });
|
||||||
|
Console.WriteLine(JsonHelper.Instance.Serialize(obj));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -155,17 +155,17 @@ namespace OpenAuth.WebApi.Controllers
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[AllowAnonymous]
|
[AllowAnonymous]
|
||||||
public TableData Invoke([FromBody] InvokeDynamicReq req)
|
public Response<object> Invoke([FromBody] InvokeDynamicReq req)
|
||||||
{
|
{
|
||||||
var result = new TableData();
|
var result = new Response<object>();
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
result = _app.Invoke(req);
|
result.Data = _app.Invoke(req);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
result.code = 500;
|
result.Code = 500;
|
||||||
result.msg = ex.InnerException?.Message ?? ex.Message;
|
result.Message = ex.InnerException?.Message ?? ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
Reference in New Issue
Block a user