在ASPNETCORE中获得所有Action

本文旨在记录自己在aspnetcore工作中需要获取所有Action,在查询了资料后进行了几种方法的记录。后期有发现其它方式再进行追加。

一、通过 反射 查看

(该方法过于常见,此处略)

二、通过 ApplicationPartManager 查看

  1. 通过构造函数注入ApplicationPartManager
  2. 通过 PopulateFeature() 方法将数据设置到ControllerFeature实例中;

public class ListController : Controller
{
public ListController(ApplicationPartManager applicationPartManager)
{
_applicationPartManager = applicationPartManager;
}
private ApplicationPartManager _applicationPartManager; public IEnumerable<dynamic> List()
{
var controllerFeature = new ControllerFeature();
_applicationPartManager.PopulateFeature(controllerFeature);
var data = controllerFeature.Controllers.Select(x => new
{
Namespace = x.Namespace,
Controller = x.FullName,
ModuleName = x.Module.Name,
Actions = x.DeclaredMethods.Where(m=>m.IsPublic && !m.IsDefined(typeof(NonActionAttribute))).Select(y => new
{
Name = y.Name,
ParameterCount = y.GetParameters().Length,
Parameters = y.GetParameters()
.Select(z => new
{
z.Name,
z.ParameterType.FullName,
z.Position,
Attrs = z.CustomAttributes.Select(m => new
{
FullName = m.AttributeType.FullName,
})
})
}),
});
return data;
}
}

方法优缺点:

  • 优点:

使用方便;

能直接获取所有注册的Controller;

  • 缺点:

不能获取action信息;

不能方便的获取路由信息;

三、通过 IActionDescriptorCollectionProvider 查看

  1. 通过构造函数注入IActionDescriptorCollectionProvider 实例;

private IActionDescriptorCollectionProvider _actionProvider; public IEnumerable<dynamic> List()
{
var actionDescs = _actionProvider.ActionDescriptors.Items.Cast<ControllerActionDescriptor>().Select(x => new
{
ControllerName = x.ControllerName,
ActionName = x.ActionName,
DisplayName = x.DisplayName,
RouteTemplate = x.AttributeRouteInfo.Template,
Attributes = x.MethodInfo.CustomAttributes.Select(z=>new {
TypeName = z.AttributeType.FullName,
ConstructorArgs = z.ConstructorArguments.Select(v => new {
ArgumentValue = v.Value
}),
NamedArguments = z.NamedArguments.Select(v => new {
v.MemberName,
TypedValue = v.TypedValue.Value,
}),
}),
ActionId = x.Id,
x.RouteValues,
Parameters = x.Parameters.Select(z => new {
z.Name,
TypeName = z.ParameterType.Name,
})
}); return actionDescs;
}

方法优缺点

  • 优点:

能快速查看所有的acton详细信息及其路由信息,包括参数信息,特性等等;

  • 缺点:

不能方便得查看Controller的信息;

在ASPNETCORE中获得所有Action的更多相关文章

  1. ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据

    在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...

  2. MVC 5 中Filter控制 action的访问权限

    1,创建一个继承自 FilterAttribute, IActionFilter的类 namespace HeatMetering2.Filters { public class HMV2Authen ...

  3. jquery中ajax向action传递对象参数,json ,spring注入对象

    首先,我这个程序的框架是spring+struts2+hibernate. 后端的action的需要接受从前端传进来的参数,由spring的注入,可知,如果前端用的是form的话,只需要在每个inpu ...

  4. 在AspNetCore 中 使用Redis实现分布式缓存

    AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemoryCache,以及缓存的基础概念.本篇会进行一些概念上的补充. 本篇我们记录的内容是怎么在Core中使 ...

  5. AspNetCore中使用Ocelot之 IdentityServer4(1)

    AspNetCore中使用Ocelot之 IdentityServer4(1) 前言: OceLot网关是基于AspNetCore 产生的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本 ...

  6. loadrunner 技巧-模拟Run Logic中的随机Action运行

    技巧-模拟Run Logic中的随机Action运行 by:授客 QQ:1033553122   可以这样做,Run-time Settings,删除Action7,然后在其它Action比如Acti ...

  7. ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost

    我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...

  8. struts2中<welcome-file>index.action</welcome-file>直接设置action,404的解决方案

    这几天的项目页面的访问全部改为.action访问,在修改首页时遇到了问题.将web.xml文件中<welcome-file>index.action</welcome-file> ...

  9. Struts1中actionform和action属于MVC哪一层,为什么?

    Struts1中actionform和action属于MVC哪一层,为什么? 解答:actionform和action属于MVC的Model层,Action用来处理业务逻辑,actionform保存用 ...

随机推荐

  1. easyui引入

    <% String path = request.getContextPath()+"/"; out.println("<link href='"+ ...

  2. [原创] 思维导图笔记(二):SQL

    为了补一补知识体系上的缺漏,最近找了看完了Ben Forta写的<Sams Teach Yourself SQL in 10 Minutes>,翻译过来叫<SQL必知必会>.从 ...

  3. Android 虚拟机访问本地服务器的地址

    http://10.0.2.2:8080/test/ 比如 localhost:8080 为 tomcat 地址,然后 test 是 tomcat 目录下 webapps 的子目录. 10.0.2.2 ...

  4. 来到cnblong dayone

    以前懒得做笔记,csdn上有些小随笔,但是感觉csdn上的广告和积分下载越来越无法忍受了.现在转到cnblog.希望以后能够多写一些随笔吧.也算是一种坚持.听说90天可以养成一种习惯,那么就从现在开始 ...

  5. OCP 052新加的考试题收集整理-第20道

    20. Which is true about the SYSTEM and SYSAUX tablespaces? A) The SYSAUX tablespace can be made read ...

  6. threading.local()方法;线程池

    一,threading.local() import time import threading v = threading.local() def func(arg): # 内部会为当前线程创建一个 ...

  7. php运行环境学习

    web服务器,负责响应客户端请求.对于静态页面请求,会立即返回相应页面给客户端:如果是动态页面,web服务器会根据 httpd.conf中的AddType配置,提交给合适的动态脚本解析程序预处理,然后 ...

  8. Squid代理服务器(二)——配置Squid服务器

    一.传统代理 (一)需求分析 局域网内,客户机访问自家的Web服务器,通过Squid代理服务器访问Web服务器,再由Squid反馈给客户机;在Squid主机上,构建Squid为客户机访问网站提供代理服 ...

  9. Angular2 内置指令 NgFor 和 NgIf 详解

    http://www.jb51.net/article/89781.htm 在这一章节中,我们来学习如何使用Angular2来展示数据,以及如何使用它的内置指令NgFor和NgIf 首先要确保你有一个 ...

  10. 用IDA辅助分析grub的小技巧

    IDA可以辅助我们分析grub的代码,但是bootloader本身只是bin文件,为了让IDA能正确识别分析,我们还需要提供一些基本的参数,比如文件加载到内存的地址等. 图中MBR是加载到0x7C00 ...