排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
原
net core 过滤器。net core 过滤器获取特性。过滤器获取控制器名称,获取action名称
分类:
.NET Core
注册过滤器的位置和net framework有点区别,但是也差不多。
3.x版本中
services.AddControllersWithViews(a => { //配置一个ServiceFilter a.Filters.AddService<CheckTokenFilter>(); }).AddRazorRuntimeCompilation();
在过滤器中获取action与controller的名称
转成ControllerActionDescriptor就可以了
public void OnActionExecuting(ActionExecutingContext context) { if (context.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) { string actionName = controllerActionDescriptor.ActionName; string controllerName = controllerActionDescriptor.ControllerName; if (controllerName.ToLower() == "User".ToLower() && actionName.ToLower() == "ArticleDetials".ToLower()) { } } }
下面说一下在过滤器中常用的几个小知识
获取控制器,action的特性
获取当前所有的过滤器
跳转页面
public override void OnActionExecuting(ActionExecutingContext filterContext) { var noNeedCheck = false; if (filterContext.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor) { //noNeedCheck = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true) // .Any(a => a.GetType().Equals(typeof(NoSignAttribute))); //获取请求controller的特性 object[] noSignAttribute = controllerActionDescriptor.ControllerTypeInfo.GetCustomAttributes(typeof(NoSignAttribute), false); noNeedCheck = noSignAttribute.Any(a => a.GetType().Equals(typeof(NoSignAttribute))); } if (noNeedCheck) return; //获取当前所有的过滤器 var filter = filterContext.Filters; //跳转页面 filterContext.Result = new RedirectResult("/login/index"); }
上面有获取控制器上面的NoSignAttribute,是自定义的。可以使用验证一些东西。比如有这个特性就不进行过滤器的逻辑验证了
public class NoSignAttribute : Attribute { }
欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739
评价