在ASP.NET vNext中获取当前的MethodBase

时间:2015-09-15 10:27:47

标签: asp.net asp.net-core coreclr

我正在将常规.NET 4 Client Profile中的开源库移植到DNX Core 5.0。有很多库更改,其中的属性或方法被移动或完全删除。我查看了this answer,但在我的情况下它不起作用,因为该方法已被删除。

问题之一我有一段代码,其中MethodBase.GetCurrentMethod()被调用。 API中不再存在此方法。剩下的唯一相似的方法是:

public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle);
public static MethodBase GetMethodFromHandle(RuntimeMethodHandle handle, RuntimeTypeHandle declaringType);

但我不确定'手柄'是什么。我需要获取MethodBase才能访问其参数,然后处理它们以进行REST API查询。这是在.NET 4中构建对象的代码:

public static Annotation Annotation(string query = null, string text = null, string type = null, string name = null, string entity = null, int limit = 25, int offset = 0)
    {
      var search = Help.SearchToString(MethodBase.GetCurrentMethod(), query, text, type, name, entity);
      return Help.Find<Annotation>(search, limit, offset, "annotation");
    }

然后在这里使用:

public static string SearchToString(MethodBase m, params object[] search)
    {
      var paras = m.GetParameters();
      var result = string.Empty;

      for (var i = 0; i < search.Length; i++)
      {
        if (search[i] != null)
        {
          if (i == 0)
          {
            result += search[i] + "%20AND%20";
          }
          else
          {
            result += paras[i].Name.ToLower() + ":" + search[i] + "%20AND%20";
          }         
        }      
      }

      return result.LastIndexOf("%20AND%20", StringComparison.Ordinal) > 0
        ? result.Substring(0, result.LastIndexOf("%20AND%20", StringComparison.Ordinal))
        : result;
    }

如果我无法轻松地将上述MethodBase作为参数传递,我可以采用其他方式访问SearchToString()方法中的MethodBase对象参数吗?

1 个答案:

答案 0 :(得分:3)

假设方法Annotation在班级TestClass中,请使用

typeof(TestClass).GetMethod(nameof(Annotation))