zoukankan      html  css  js  c++  java
  • c# Mono.Cecil IL方式 读MethodBody

    using Kufen.Common.Definitions;
    using Mono.Cecil;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text.RegularExpressions;
    using System.Web;
    
    namespace Kufen.WebApi.SwaggerHelp
    {
        public class SwaggerModelHelp
        {
            public static List<SwaggerEncryptModelInfo> GetDecryptRequestMetaInfoList()
            {
                var decryptRequestMetaInfoList = new List<SwaggerEncryptModelInfo>();
                var path = typeof(SwaggerModelHelp).Assembly.Location;
                var assembly = AssemblyDefinition.ReadAssembly(path);
                var toInspect = assembly.MainModule
                  .GetTypes()
                  .SelectMany(t => t.Methods.Select(m => new { t, m }))
                  .Where(x => x.m.HasBody);
                toInspect = toInspect.Where(
                    x => x.t.Name.EndsWith("Controller") &&
                    x.m.IsPublic == true &&
                    x.m.Parameters.Any(m => m.ParameterType.Name == nameof(DecryptRequest))
                );
                foreach (var method in toInspect)
                {
                    var containsEncryptRequestMethodBody = method.m.Body.Instructions.ToList().Where(m => m.ToString().Contains("EncryptRequestHandler")).FirstOrDefault();
                    if (containsEncryptRequestMethodBody != null)
                    {
                        var ilStr = containsEncryptRequestMethodBody.ToString();
                        var regMatchResult = Regex.Match(ilStr, "EncryptRequestHandler<(?<EncryptRequestModel>[^,]+),(?<EncryptResponseModel>[^>]+)>");
                        var encryptRequestModel = regMatchResult.Groups["EncryptRequestModel"].Value;
                        var encryptResponseModel = regMatchResult.Groups["EncryptResponseModel"].Value;
                        decryptRequestMetaInfoList.Add(new SwaggerEncryptModelInfo
                        {
                            Controller = method.t.FullName,
                            Action = method.m.Name,
                            ReqModelType = encryptRequestModel,
                            ResModelType = encryptResponseModel
                        });
                    }
                }
                return decryptRequestMetaInfoList;
            }
        }
    }
  • 相关阅读:
    办公室搞笑记(2) 李姐
    世界上疼我的人又少了一个
    带给杨帆的祝福:)
    火:) 火:) 火:)
    我们都是享受寂寞的孩子:)
    복 경 에 갑 니 다 :) 去北京.
    너는 겨울이 좋아요 .我喜欢冬天:)
    2007年:新年,新开始:)
    Nginx 泛域名配置方式
    数据库设计 从零开始系列之一
  • 原文地址:https://www.cnblogs.com/gaocong/p/11532214.html
Copyright © 2011-2022 走看看