【笔记】使用接口的方式,将有[RequestControl(RequestorType.Admin)]的接口查询出来

   [Route("adm/getInfo")]
    [HttpGet]
    public string GetInfo()
    {
        var types = typeof(GCP.Server.WebAPI.Controllers.HomeController).Assembly.GetTypes().Where(m => m.Name.EndsWith("Controller"));
        System.Text.StringBuilder sb = new System.Text.StringBuilder(100);
        sb.Append("接口").Append(",").Append("类型").Append(",").Append("注释").AppendLine();
        using (System.IO.StreamReader sr = new System.IO.StreamReader(@"G:\GCP\SourceCode\GCP\GCP.WebAPI\App_Data\GCP.WebAPI.XML"))
        {
            System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
            xml.Load(@"G:\GCP\SourceCode\GCP\GCP.WebAPI\App_Data\GCP.WebAPI.XML");
            var members = xml.LastChild.LastChild.ChildNodes;
            foreach (var t in types)
            {
                var routePrefix = t.GetCustomAttributes(false).FirstOrDefault(m => m.ToString().Contains("RoutePrefix")) as RoutePrefixAttribute;
                if (routePrefix == null)
                {
                    continue;
                }
                string prefix = routePrefix.Prefix;
                var ms = t.GetMethods(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)
                    .Where(m => m.GetCustomAttributes(false).Any(n => n.GetType() == typeof(RequestControlAttribute)));
                foreach (var m in ms)
                {
                    var requestCtrl = m.GetCustomAttributes(typeof(RequestControlAttribute), false)[0] as RequestControlAttribute;
                    var routeAttr = m.GetCustomAttributes(typeof(RouteAttribute), false)[0] as RouteAttribute;
                    Row r = new Row
                    {
                        Url = prefix + "/" + routeAttr.Template,
                        Type = requestCtrl.requestorType.ToString(),
                        Content = GetContent(members, m)
                    };
                    sb.Append(r.Url).Append(",").Append(r.Type).Append(",").Append(r.Content).AppendLine();
                }
            }
        }
        System.IO.File.WriteAllText("d:/info.csv", sb.ToString(), System.Text.Encoding.UTF8);
        return "OK";
    }
    private string GetContent(XmlNodeList members, MethodInfo m)
    {
        for (int i = 0; i < members.Count; i++)
        {
            var mem = members[i];
            if (mem.Attributes["name"].Value.Contains(m.DeclaringType.ToString() + "." + m.Name))
            {
                return mem.FirstChild.InnerText.Replace("\r\n", "").Replace(",", "_").Trim();
            }
        }
        return "";
    }
    class Row
    {
        public string Url { get; set; }
        public string Type { get; set; }
        public string Content { get; set; }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 一. Java基础部分.................................................
    wy_sure阅读 3,854评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • 《ijs》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 5,390评论 0 7
  • 一 如果要问:对一个人的影响最大的力量是什么? 你的答案会是什么?性格?背景?学历?抑或不可捉摸的运气? 我的答案...
    冬日霞光阅读 635评论 4 12