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;
            }
        }
    }
  • 相关阅读:
    MySQL第五天
    phprpc
    最近数据库不怎么太平
    dumpfile参数,linux和windows下稍有不同
    impdp 时无反应
    修改IP后,重新config EM
    ORA00054: resource busy and acquire with NOWAIT specified
    测试修改DBID手记
    如何关闭任务计划
    文件夹打开变成寻找框如何解决
  • 原文地址:https://www.cnblogs.com/gaocong/p/11532214.html
Copyright © 2011-2022 走看看