zoukankan      html  css  js  c++  java
  • 反射找Controller中的方法

     1        /// <summary>
     2         /// 根据接口编码APICode,调用相应的webapi方法,注意返回值是json字符串
     3         /// </summary>
     4         /// <param name="apiCode">接口编码</param>
     5         /// <param name="requestJson">请求的json字符串</param>
     6         /// <returns>返回的json字符串</returns>
     7         public string Send(string apiCode, string requestJson)
     8         {
     9 
    10             var isExsitMethod = false;
    11             var resultJson = string.Empty;
    12             Assembly assembly = Assembly.GetExecutingAssembly(); //加载当前应用程序集
    13             Type[] typearr = assembly.GetTypes().Where(x => x.BaseType != null && x.BaseType.Name == "Controller").ToArray();
    14             //获取类型过滤掉非Controller控制器
    15             MethodInfo methodinfo = null;
    16             Type curtype = null;
    17             foreach (Type type in typearr) //针对每个类型获取详细信息
    18             {
    19                 methodinfo = type.GetMethod(apiCode); //获取方法信息
    20                 if (methodinfo != null)
    21                 {
    22                     isExsitMethod = true;
    23                     curtype = type;
    24                     break;
    25                 }
    26             }
    27             if (isExsitMethod)
    28             {
    29                 ParameterInfo[] paramsInfo = methodinfo.GetParameters(); //得到指定方法的参数列表 
    30                 Type tType = paramsInfo[0].ParameterType;
    31                 var obj = new object[1];
    32                 if (tType.IsClass) //如果是类,将它的json字符串转换成对象   
    33                 {
    34                     obj[0] = Newtonsoft.Json.JsonConvert.DeserializeObject(requestJson, tType);
    35 
    36                 }
    37                 object objtype = Assembly.GetExecutingAssembly().CreateInstance(curtype.FullName.ToString(), true, BindingFlags.Default, null, new object[0], null, null);
    38                 var response = methodinfo.Invoke(objtype, obj);
    39                 resultJson = SerializeHelper.ToJson(response);
    40                 return resultJson;
    41             }
    42 
    43             return string.Format("未找到方法{0}", apiCode);
    44 
    45         }
  • 相关阅读:
    Python中的返回函数与闭包
    Python的高阶函数小结
    Python的生成器Generator小结
    Vim插件YCM的安装
    用Vundle管理Vim插件
    声卡(Sound Card)基本概念
    Linux中Source的用法
    js 的执行过程
    mongoose@4.5.2的eachAsync bug
    [mongodb] MMAP 和wiredTiger 的比较
  • 原文地址:https://www.cnblogs.com/hwisecn/p/6684769.html
Copyright © 2011-2022 走看看