MVC中的筛选器

在 ASP.NET MVC 中,控制器将定义一些操作方法,这些操作方法与可能的用户交互(如单击链接或提交窗体)之间通常具有一一对应关系。例如,当用户单击链接时,会将请求路由到指定的控制器,然后调用对应的操作方法。 例如操作完成后你要产生日志、语言筛选、等其他动态操作。

筛选器的由来及用途

有时,您需要在调用操作方法之前或运行操作方法之后执行逻辑。

为了对此提供支持,ASP.NET MVC 提供了筛选器。筛选器是自定义类,可提供用于向控制器操作方法添加操作前行为和操作后行为的声明性和编程性手段。

操作筛选器的可能用途与能够应用它们的操作一样种类繁多。 操作筛选器的某些可能用途包括:

·日志记录,目的是跟踪用户交互。

·“反图像攫取”,用于防止在自己网站之外的网页中加载图像。

·爬网程序筛选,用于根据浏览器用户代理来更改应用程序行为。

·本地化,用于设定区域设置。

·动态操作,用于将操作注入到控制器中。

ASP.NET MVC 筛选器的类型

ASP.NET MVC 框架支持四种不同类型的筛选器:

1.授权筛选器 — — 实现的 IAuthorizationFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    // 摘要:
    //     定义授权筛选器所需的方法。
    public interface IAuthorizationFilter
    {
        // 摘要:
        //     在需要授权时调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文。
        void OnAuthorization(AuthorizationContext filterContext);
    }
}</span>

2.操作筛选器 — — 实现的 IActionFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    public interface IActionFilter
    {
        void OnActionExecuted(ActionExecutedContext filterContext);
        void OnActionExecuting(ActionExecutingContext filterContext);
    }
}</span>

3.结果筛选器 — — 实现的 IResultFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    public interface IResultFilter
    {
        void OnResultExecuted(ResultExecutedContext filterContext);
        void OnResultExecuting(ResultExecutingContext filterContext);
    }
}</span>

4.异常筛选器 — — 实现的 IExceptionFilter 属性。

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    public interface IExceptionFilter
    {
        void OnException(ExceptionContext filterContext);
    }
}</span>

筛选器的执行上面列出的顺序。 例如,授权筛选器将总是在操作筛选器之前执行,异常筛选器将始终执行后每个其他类型的筛选器。

授权筛选器用于实现身份验证和授权的控制器操作。例如,授权筛选器是一个示例授权筛选器。

操作筛选器包含执行之前和之后的控制器操作执行的逻辑。你可以使用操作筛选器,例如,修改控制器操作返回的视图数据。

结果筛选器包含的逻辑,执行之前和之后执行视图结果。例如,您可能想要修改视图结果右视图呈现到浏览器之前。

异常筛选器筛选器运行的最后一个类型。您可以使用异常筛选器来处理您的控制器操作或控制器操作结果由引发的错误。 此外可以使用异常筛选器来记录错误。

每种不同类型的筛选器按特定的顺序执行。如果你想要控制在其中执行相同类型的筛选器的顺序你可以设置一个筛选器的 Order 属性。

所有操作筛选器的基类是 System.Web.Mvc.FilterAttribute  类。 如果您想要执行特定类型的筛选器,然后,您需要创建一个类,从筛选器基类继承并实现一个或更多的 IAuthorizationFilter 、   IActionFilter、 IResultFilter 或ExceptionFilter 接口

为了使您更轻松地实现自定义操作筛选器,ASP.NET MVC 框架包括 ActionFilterAttribute 的基类。此类实现的 IActionFilter 和 IResultFilter 接口,并从 Filter 的类继承。

这里的术语不是完全一致的。 从技术上讲,从 ActionFilterAttribute 的类继承的类是操作筛选器和结果筛选器。

ActionFilterAttribute类的基类方法:

ActionFilterAttribute 类的基类具有下列方法,您可以重写:

  • OnActionExecuting — — 控制器中的操作执行之前调用此方法。
  • OnActionExecuted — — 控制器中的操作执行后调用此方法。
  • OnResultExecuting — — 控制器操作结果执行之前调用此方法。
  • OnResultExecuted — — 这种方法称为后执行的控制器操作结果。
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace System.Web.Mvc
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
    public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter
    {
        protected ActionFilterAttribute();

        public virtual void OnActionExecuted(ActionExecutedContext filterContext);
        public virtual void OnActionExecuting(ActionExecutingContext filterContext);
        public virtual void OnResultExecuted(ResultExecutedContext filterContext);
        public virtual void OnResultExecuting(ResultExecutingContext filterContext);
    }
}</span>

有了筛选器我们的程序变得完美了,权限、操作、响应、异常这一系列的问题都完全被我们自己掌控,成为我们自己的规则,可控性更高。

其实这些就是AOP思想的体现,而MVC自带了filter可以实现日志功能,后面我们会详细讲述怎样实现。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-08 05:19:53

MVC中的筛选器的相关文章

spring mvc中的拦截器小结 .

在spring mvc中,拦截器其实比较简单了,下面简单小结并demo下. preHandle:预处理回调方法,实现处理器的预处理(如登录检查),第三个参数为响应的处理器(如我们上一章的Controller实现):      返回值:true表示继续流程(如调用下一个拦截器或处理器):              false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应: postHandle:后处理回调方法,实现处理器的后处理(但在渲

DirectX 因素:了解 XAudio2 中的筛选器

Charles Petzold 下载代码示例 在著名的波形的万神殿,简单的正弦曲线至高无上. 只是看着它,您可以看到其精髓的顺利起伏性质 - - 当它达到其峰值. 几乎停止,它冠,然后逐步加快速度减慢,达到它的最大速度横渡水平轴开始另一个经济放缓. 这种视觉印象更深的数学分析所证实. 正弦曲线在任意点的瞬时速度是对曲线切线. 图的那些速度,并可以得到另一个正弦曲线,由四分之一周期从原始偏移. 不要再使用这第二条曲线,它和那是显示加速度,偏移量从原来的半个周期,如中所示的正弦曲线图 1. 图 1

Spring MVC中的拦截器Interceptor

谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主要分两种,一个是HandlerInterceptor,一个是MethodInterceptor. 一,HandlerInterceptor拦截器 HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行.实现一个Ha

asp.net mvc中的拦截器

在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器,所谓的拦截器也没有什么的,只是写一个类,继承另一个类和一个接口,顺便实现接口里面的方法而以拉!下面我们一一实现! public class ExceptionFillters : FilterAttribute,IExceptionFilter    {        //发生异常时会执行这段代码        public void OnException(ExceptionContex

Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用

一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filter这种方式可以实现Bean预处理.后处理. 比如注入FilterRegistrationBean,然后在这个Bean上传递自己继承Filter实现的自定义Filter进入即可. 而Spring MVC也有拦截器,不仅可实现Filter的所有功能,还可以更精确的控制拦截精度. Spring MVC提供的org.springframework.web.servlet.handler.HandlerInt

Spring mvc中自定义拦截器

一.要实现的一个功能: 1.打开特定的一些页面时必需强制用户进行登录. 2.登录后再返回到之前的页面. 二.先写一个service,实现从cookie中判断用户是否登录. 1.TT_TOKEN为登录成功时,响应给浏览器的Cookie的键. @Service public class UserServiceImpl implements UserService{ @Value("${SSO_BASE_URL}") private String SSO_BASE_URL; @Value(&

在MVC中添加拦截器实现登录后的权限验证

1.新建一个类 (以下实现了打印日志功能) using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcReporistory.Controllers { public class LoggerFilter : FilterAttribute, IActionFilter { void IActionFilter.On

asp.net core 2.2 中的过滤器/筛选器(上)

ASP.NET Core中的过滤器/筛选器 通过使用 ASP.NET Core MVC 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码. 注意:本主题不适用于 Razor 页面. ASP.NET Core 2.1 及更高版本支持适用于 Razor 页面的 IPageFilter 和 IAsyncPageFilter. 有关详细信息,请参阅 Razor 页面的筛选方法. 内置筛选器处理一些任务,例如: 授权(防止用户访问未获授权的资源). 确保所有请求都使用 HTTPS. 响应缓存(对

Spring MVC中拦截器HandlerInterceptorAdapter中的preHandle方法

拦截器:顾名思义,就是对请求进行拦截,做一些预处理.后处理或返回处理的操作 Spring MVC中使用拦截器的方法,继承HandlerInterceptorAdapter类,并根据需求实现其中的preHandle方法(预处理).postHandle方法(返回处理),afterCompletion方法(后处理). public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object han