应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

asp.net mvc过滤器

5443人阅读 2019/10/10 11:46 总访问:5194735 评论:0 收藏:0 手机
分类: .NET MVC


过滤器简介:

面向切面的编程方式

可以实现不改动原有逻辑的基础上添加自己的逻辑

使用的时候添加一个配置即可,不想用的时候取消配置就行


过滤器作用范围:

1:全局过滤器

      FilterConfig里边去添加一条

2:控制器级别

      使用特性方式加入控制器上面

3:  action级别

     使用特性方式加入Action上面


过滤器分类:

IActionFilter:action执行之前和执行之后进入该过滤器

IResultFilter:页面返回之前和页面返回之后

IAuthorizationFilter:用来做权限相关,针对性更强一点

IExceptionFilter:全局异常处理

注意:控制器本身就是一个过滤器,而且是具有一个多种类型的过滤器

我们看控制器实现的接口就知道了


时间有限,下面来几个常用过滤器的简单小例子:

权限过滤器:

  1. public class LoginAuthorFilter : AuthorizeAttribute
  2. {
  3.     /// <summary>
  4.     /// 验证是否有权限
  5.     /// 返回false表示验证失败,就是执行HandleUnauthorizedRequest
  6.     /// </summary>
  7.     /// <param name="httpContext"></param>
  8.     /// <returns></returns>
  9.     protected override bool AuthorizeCore(HttpContextBase httpContext)
  10.     {
  11.         UserInfoModel userInfoModel = httpContext.Session["userInfo"as UserInfoModel;
  12.         if (userInfoModel == null)
  13.             return false;
  14.         else
  15.             return true;
  16.     }
  17.     /// <summary>
  18.     /// 没有权限的时候执行
  19.     /// </summary>
  20.     /// <param name="filterContext"></param>
  21.     protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
  22.     {
  23.         filterContext.Result = new RedirectResult("/login/index");
  24.     }
  25. }

配置过滤器可以使用AllowAnonymous特性来忽略模某些控制器或者action不进行权限验证

异常处理过滤器:

   当系统出现异常时执行

  1. public class ExceptionFilter : IExceptionFilter
  2. {
  3.     public void OnException(ExceptionContext filterContext)
  4.     {
  5.         //获取错误信息
  6.         string errorMsg = filterContext.Exception.Message;
  7.         //错误页面
  8.         string url = filterContext.HttpContext.Request.RawUrl;
  9.                 //表示异常信息已经被处理
  10.         filterContext.ExceptionHandled = true;
  11.         using (FileStream file = new FileStream(filterContext.HttpContext.Server.MapPath("~/log/"+DateTime.Now.ToShortDateString().Replace("/","-")+"errolog.txt"), FileMode.Append))
  12.         {
  13.             using (StreamWriter writer = new StreamWriter(file))
  14.             {
  15.                 writer.WriteLine("错误信息:" + errorMsg);
  16.                 writer.WriteLine("错误时间:" + DateTime.Now);
  17.                 writer.WriteLine("错误页面:" + url);
  18.                 writer.WriteLine("请求方式:" + filterContext.HttpContext.Request.RequestType);
  19.                 writer.WriteLine("IP地址:" + filterContext.HttpContext.Request.UserHostAddress);
  20.                 writer.WriteLine("浏览器信息:" + filterContext.HttpContext.Request.UserAgent);
  21.                 writer.WriteLine("------------------------------------------------------------");
  22.             }
  23.         }
  24.         filterContext.Result = new RedirectResult("/Common/ErrorPage");
  25.     }
  26. }

Action过滤器:

  1. public class IsLoginFilter : FilterAttributeIActionFilter
  2. {
  3.     public bool isuse = true;
  4.     public void OnActionExecuted(ActionExecutedContext filterContext)
  5.     {
  6.     }
  7.     public void OnActionExecuting(ActionExecutingContext filterContext)
  8.     {
  9.         //需要放行的
  10.         if (isuse == false)
  11.             return;
  12.         UserInfoModel userInfoModel = filterContext.HttpContext.Session["userInfo"as UserInfoModel;
  13.         string rawUrl = filterContext.HttpContext.Request.RawUrl;
  14.         //获取控制的名字
  15.         string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
  16.         //获取action的名字
  17.         string actionName = filterContext.ActionDescriptor.ActionName;
  18.         if (userInfoModel == null)
  19.         {
  20.             //通过指定返回值跳转
  21.             filterContext.Result = new RedirectResult("/login/index");
  22.         }
  23.     }
  24. }


过滤器的优先级:

IAuthorizationFilter-->IActionFilter-->IResultFilter

同级的时候可以通过order改变过滤器优先级,数值越小越先执行

第二个参数就是优先级了


显示一个action的所有过滤器:

后台

  1. public ActionResult Index(string errorInfo)
  2. {
  3.     //输出某个作用在action的所有过滤器
  4.     ReflectedControllerDescriptor rcd = new ReflectedControllerDescriptor(typeof(LoginController));
  5.     ActionDescriptor action = rcd.FindAction(ControllerContext, "index");
  6.     IEnumerable<System.Web.Mvc.Filter> filters = FilterProviders.Providers.GetFilters(ControllerContext, action);
  7.     ViewBag.info = errorInfo;
  8.     return View(filters);
  9. }

前台

  1. @using System.Web.Mvc
  2. @model IEnumerable<Filter>
  3. <table>
  4.     <tr>
  5.         <td>过滤器</td>
  6.         <td>优先级</td>
  7.         <td>作用域</td>
  8.     </tr>
  9.     @foreach (Filter item in Model)
  10.     {
  11.         <tr>
  12.             <td>@item.Instance</td>
  13.             <td>@item.Order</td>
  14.             <td>@item.Scope</td>
  15.         </tr>
  16.     }
  17. </table>

效果:




欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

Vue.js常用指令,事件绑定等,Vue过滤器解析状态过滤器多个参数。vue表格状态解析。vue解析类型,element ui解析类型,状态,el-tag

按照html的编码显示:v-html&lt;div class=&quot;font_info&quot; v-html=&quot;item.Content&quot;&gt;{{item.Content}}&l...

mvc过滤器

过滤器:过滤器(filter):是基于AOP(面向接口编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑。本质:...

net core 过滤器net core 过滤器获取特性。过滤器获取控制器名称,获取action名称

注册过滤器的位置和net framework有点区别,但是也差不多。3.x版本中services.AddControllersWithViews(a=&gt; { //配置...

net core过滤器net core过滤器中获取依赖注入对象。net core过滤器中使用依赖注入。ServiceFilter 

虽然对象都可以直接实例化得到。但是所有的对象依赖关系,都用DI容器去管理,这样后面想要更换对象的时候也非常方便,项目...

asp.net core中间件与过滤器的区别

中间件和过滤器的作用很相似,但是针对的点不一样。过滤器更贴合业务,它关注于应用程序本身,比如你看ActionFilter 和 Res...

layui+过滤器 实现权限管理

想要做好一个权限管理并不简单,不管是数据库还是逻辑上都还是有一点复杂的 下面开始讲解我们的权限管理首先创建数据库《规...

net core使用jwt 三: 使用过滤器实现通用token验证Token验证工具类

net core使用jwt二 : 验证前台传递的tokenhttp://www.tnblog.net/aojiancc2/article/details/2845过滤器实现通用token验证...

关于中间件和过滤器

中间件(Middleware)的作用中间件的运行方式中间件(Middleware)和过滤器(Filter)的区别什么情况我们需要中间件怎么样...

net core 中间件(Middleware)和过滤器(Filter)的区别

前言平安夜快乐!未来可期,人间值得!储存阳光,必有远芳。心中有暖,又何惧人生荒凉!一、中间件(Middleware)的作用我...

中间件与过滤器的区别

首先在core中中间件是以app开头,过滤器是以services开头.中间件的作用: 中间件就是在应用程序管道中的一个组件,用来拦截...

net core使用依赖注入应用过滤器+自定义中间件

圣诞节快乐过什么圣诞节哦,圣诞老人已经被我抓起来了。我们今天主要讲的是NET Core中的依赖注入数据,使用过滤器调用+自定...

.net core 3.0配置过滤器

.net core 3.0中services.AddControllersWithViews(a=&gt; { a.Filters.AddService&lt;CheckTokenFilter&gt;(); }).AddR...

.net core 3.0配置全局过滤器

.net core 3.0配置全局过滤器services.AddControllersWithViews(a=&gt; { //配置一个ServiceFilter a.Filters.AddServic...

.net core过滤器中跳转

使用如下方法跳转既可,这样相比context.HttpContext.Response.Redirect重定向来说不会执行控制器方法了context.Result=new...

.net core过滤器向控制器添加参数

代码如下://给控制器传递参数 DTO_LoginInfologinUserInfo=newDTO_LoginInfo(); //对象的赋值操作......... context.Ac...