C# MVC-----自定义过滤器

引言:

       APS.NET MVC中(以下简称“MVC”)的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理。这时候就用到了过滤器。MVC支持的过滤器类型有四种,分别是:Authorization(授权),Action(行为),Result(结果)和Exception(异常)。如下表,

 

过滤器类型

接口

描述

Authorization

IAuthorizationFilter

此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法

Exception

IExceptionFilter

用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常

Action

IActionFilter

用于进入行为之前或之后的处理

Result

IResultFilter

用于返回结果的之前或之后的处理

但是默认实现它们的过滤器只有三种,分别是Authorize(授权),ActionFilter,HandleError(错误处理);各种信息如下表所示

 

过滤器

类名

实现接口

描述

ActionFilter

AuthorizeAttribute

IAuthorizationFilter

此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法

HandleError

HandleErrorAttribute

IExceptionFilter

用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常

自定义

ActionFilterAttribute

IActionFilter和IResultFilter

用于进入行为之前或之后的处理或返回结果的之前或之后的处理

 

在这里我主要介绍一下自定义过滤器  以实现登录为例子。测试环境:VS2017  MVC。

登录具体功能:未登录的用户则返回登录界面,已登录的用户则通过!

首先:新建一个类:LoginHelper

public class LoginHelper:ActionFilterAttribute//继承自定义过滤器接口:ActionFilterAttribute
   {
       //OnActionExecuting方法是在Action执行之前会被触发执行的一个方法。重写该方法!
       public override void OnActionExecuting(ActionExecutingContext filterContext)
       {
           base.OnActionExecuting(filterContext);

           **********这里放自己的逻辑代码Start************/
           string result = "";
           if (HttpContext.Current.Session["userName"]!= null)//验证session是否有值,用以判断是否登录
           {
               result = HttpContext.Current.Session["userName"].ToString();
           }
           if (result == "")
           {
               //未登录则返回登录界面
               filterContext.HttpContext.Response.Write("<script>alert('当前会话已失效,请重新登录!');window.top.location.href='/Logins/Index'</script>");
           }

           **********这里放自己的逻辑代码End************/
       }
   }

自定义过滤器已经定义好了,但是怎么使用呢?比如说,我想让它过滤指定的Action或者方法怎么办呢!

第一种方法:直接定义在方法或者Action上。

//比如这是一个后台的修改页面,只有通过登录后才能访问该页面,则可以这样写!
[LoginHelper]
 public ActionResult Update_Page()
 {
     return View();
}

 

这样是可以的,但很麻烦,我们不可能每个方法都去定义一个过滤器吧。

第二种方法:定义在类上。

/// <summary>
 /// 这是一个继承了Controller类的控制器
 /// </summary>
 [LoginHelper]//在控制器上加过滤器,则该控制器中所有方法都会进行过滤。
 public class HomeController : Controller
{

}

 

好啦,这样子就Ok啦。(本人才疏学浅,大佬路过勿喷!)

原文地址:

https://www.zddblog.top/Home/Detail?art_id=Mzk=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值