加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 查找接受字符串作为参数的所有ASP.NET MVC公共

发布时间:2020-12-16 07:27:59 所属栏目:asp.Net 来源:网络整理
导读:我试图使用 Nitriq来获取我的项目中接受字符串作为输入的所有公共操作的列表. 这是我尝试过的: var stringType = Types.Where(t = t.FullName == "System.String").Single();var arTypes = Types.Where(t = t.FullName == "System.Web.Mvc.ActionResult").S
我试图使用 Nitriq来获取我的项目中接受字符串作为输入的所有公共操作的列表.

这是我尝试过的:

var stringType = Types.Where(t => t.FullName == "System.String").Single();
var arTypes = Types.Where(t => t.FullName == "System.Web.Mvc.ActionResult").Single().DerivedTypes;

var results = 
from m in Methods
let DerivesFromAR = arTypes.Contains(m.ReturnType)
where m.ParameterTypes.Contains(stringType) && DerivesFromAR
select new { m.MethodId,m.Name,m.FullName };

我正在使用Nitriq,因为这似乎是一个理想的任务,但我对其他方法持开放态度(最好不要手工搜索我的所有方法).

解决方法

您不应该查找从System.Web.Mvc.ActionResult派生的类型,而是查找从System.Web.Mvc.Controller派生的类型,因为这些类包含返回操作结果的方法.

使用System.Reflection和System.Linq的解决方案,从应该扫描的程序集中使用

var controllerType = typeof(System.Web.Mvc.Controller);
var actionResultType = typeof(System.Web.Mvc.ActionResult);
var parameterType = typeof(string);

// find all controllers by checking their class
var controllers = Assembly.GetCallingAssembly().GetTypes().Where(t => controllerType.IsAssignableFrom(t));
// find all actions by checking their return type and parameter type
var actions = controllers.SelectMany(c => c.GetMethods()).Where(m => actionResultType.IsAssignableFrom(m.ReturnType) && m.GetParameters().Any(p => parameterType.IsAssignableFrom(p.ParameterType)));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读