在ASPNETCORE中获得所有Action
在ASPNETCORE中获得所有Action
本文旨在记录自己在aspnetcore工作中需要获取所有Action,在查询了资料后进行了几种方法的记录。后期有发现其它方式再进行追加。
一、通过 反射 查看
(该方法过于常见,此处略)
二、通过 ApplicationPartManager 查看
- 通过构造函数注入
ApplicationPartManager; - 通过
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 查看
- 通过构造函数注入
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的更多相关文章
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- MVC 5 中Filter控制 action的访问权限
1,创建一个继承自 FilterAttribute, IActionFilter的类 namespace HeatMetering2.Filters { public class HMV2Authen ...
- jquery中ajax向action传递对象参数,json ,spring注入对象
首先,我这个程序的框架是spring+struts2+hibernate. 后端的action的需要接受从前端传进来的参数,由spring的注入,可知,如果前端用的是form的话,只需要在每个inpu ...
- 在AspNetCore 中 使用Redis实现分布式缓存
AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemoryCache,以及缓存的基础概念.本篇会进行一些概念上的补充. 本篇我们记录的内容是怎么在Core中使 ...
- AspNetCore中使用Ocelot之 IdentityServer4(1)
AspNetCore中使用Ocelot之 IdentityServer4(1) 前言: OceLot网关是基于AspNetCore 产生的可扩展的高性能的企业级Api网关,目前已经基于2.0 升级版本 ...
- loadrunner 技巧-模拟Run Logic中的随机Action运行
技巧-模拟Run Logic中的随机Action运行 by:授客 QQ:1033553122 可以这样做,Run-time Settings,删除Action7,然后在其它Action比如Acti ...
- ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost
我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET.POST等). 那 ...
- struts2中<welcome-file>index.action</welcome-file>直接设置action,404的解决方案
这几天的项目页面的访问全部改为.action访问,在修改首页时遇到了问题.将web.xml文件中<welcome-file>index.action</welcome-file> ...
- Struts1中actionform和action属于MVC哪一层,为什么?
Struts1中actionform和action属于MVC哪一层,为什么? 解答:actionform和action属于MVC的Model层,Action用来处理业务逻辑,actionform保存用 ...
随机推荐
- easyui引入
<% String path = request.getContextPath()+"/"; out.println("<link href='"+ ...
- [原创] 思维导图笔记(二):SQL
为了补一补知识体系上的缺漏,最近找了看完了Ben Forta写的<Sams Teach Yourself SQL in 10 Minutes>,翻译过来叫<SQL必知必会>.从 ...
- Android 虚拟机访问本地服务器的地址
http://10.0.2.2:8080/test/ 比如 localhost:8080 为 tomcat 地址,然后 test 是 tomcat 目录下 webapps 的子目录. 10.0.2.2 ...
- 来到cnblong dayone
以前懒得做笔记,csdn上有些小随笔,但是感觉csdn上的广告和积分下载越来越无法忍受了.现在转到cnblog.希望以后能够多写一些随笔吧.也算是一种坚持.听说90天可以养成一种习惯,那么就从现在开始 ...
- OCP 052新加的考试题收集整理-第20道
20. Which is true about the SYSTEM and SYSAUX tablespaces? A) The SYSAUX tablespace can be made read ...
- threading.local()方法;线程池
一,threading.local() import time import threading v = threading.local() def func(arg): # 内部会为当前线程创建一个 ...
- php运行环境学习
web服务器,负责响应客户端请求.对于静态页面请求,会立即返回相应页面给客户端:如果是动态页面,web服务器会根据 httpd.conf中的AddType配置,提交给合适的动态脚本解析程序预处理,然后 ...
- Squid代理服务器(二)——配置Squid服务器
一.传统代理 (一)需求分析 局域网内,客户机访问自家的Web服务器,通过Squid代理服务器访问Web服务器,再由Squid反馈给客户机;在Squid主机上,构建Squid为客户机访问网站提供代理服 ...
- Angular2 内置指令 NgFor 和 NgIf 详解
http://www.jb51.net/article/89781.htm 在这一章节中,我们来学习如何使用Angular2来展示数据,以及如何使用它的内置指令NgFor和NgIf 首先要确保你有一个 ...
- 用IDA辅助分析grub的小技巧
IDA可以辅助我们分析grub的代码,但是bootloader本身只是bin文件,为了让IDA能正确识别分析,我们还需要提供一些基本的参数,比如文件加载到内存的地址等. 图中MBR是加载到0x7C00 ...