ASP.NET MVC过滤器(二)

动作过滤器

动作过滤器是可以被用作任何目的的多用途过滤器。创建这种过滤器需要实现IActionFilter接口。该接口定义了两个方法:OnActionExecuting()和OnActionExecuted()。前者会在动作方法之前执行,后者会在动作方法之后执行。

public class CustomActionAttribute : FilterAttribute, IActionFilter

{

        /// <summary>

        /// 在动作方法之后执行

        /// </summary>

        /// <param name="filterContext"></param>

        public void OnActionExecuted(ActionExecutedContext filterContext)

        {

            //throw new NotImplementedException();

        }

 

        /// <summary>

        /// 在动作方法之前执行

        /// </summary>

        /// <param name="filterContext"></param>

        public void OnActionExecuting(ActionExecutingContext filterContext)

        {

            var ActionName = filterContext.ActionDescriptor.ActionName;

            var ControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;

            filterContext.Result = new HttpNotFoundResult();    //方法结果返回404页面

        }

    }

实现自定义的动作过滤器,还需要实现FilterAttribute接口。

在OnActionExecuting方法的参数中有个Result属性,你可以通过它来控制返回的结果。

 

结果过滤器

结果过滤器是多用途过滤器,它会对动作方法产生的结果进行操作。结果过滤器实现IFilterResult接口。继承该接口需要实现OnResultExecuting和OnResultExecuted方法。

OnResultExecuting方法是在“指明意图”之后“执行意图”之前执行。OnResultExecuted方法是在“执行意图”之后执行。(指明意图和执行意图可以参考上面的“理解动作方法”一节)

 

全局过滤器

全局作用域会被运用于所有动作方法,设置它有一定的约定,我们首先在App_start添加FilterConfig.cs文件,写入以下内容:

namespace Filters

{

    public class FilterConfig

    {

        /// <summary>

        /// 全局过滤器

        /// </summary>

        /// <param name="filter"></param>

        public static void RegisterGlobalFilter(GlobalFilterCollection filter)

        {

            filter.Add(new HandleErrorAttribute());

            filter.Add(new CustomActionAttribute());

        }

    }

}

然后我们在Global.asax文件的Application_Start()添加以下内容:

FilterConfig.RegisterGlobalFilter(GlobalFilters.Filters);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值